zoukankan      html  css  js  c++  java
  • JMX远程监控JVM

    远程监控JVM状态需要在JVM启动的时候需要加上一段代码开启这个功能。(以下全部以ubuntu-14-04-server、jdk1.8、tomcat7.0环境为基础)

    配置的时候分两种情况:1、无需配置用户访问权限;2、需要配置用户访问权限

    先看第一种:
    首先更改tomcat启动参数(vim catalina.sh)
    找到 # OS specific support. $var _must_ be set to either true or false. 添加如下变量:
    CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.port=9999 --此端口号自定义,只要不是常用的或者系统已使用的即可,此处设置为1090,此端口号不是java业务进程的端口号,所以不要混淆了。
    -Dcom.sun.management.jmxremote.authenticate=false --不起用用户访问权限
    -Dcom.sun.management.jmxremote.ssl=false
    -Djava.rmi.server.hostname=10.111.43.164" 此处hostname设置为要监控的进程所在机器的IP(进程本机)

    注意这里的变量名千万不要使用JAVA_OPTS,如果使用JAVA_OPTS作为变量名的话在使用shutdown.sh停服务的时候回提示端口已被占用

    第二种是配置用户权限:
    找到 # OS specific support. $var _must_ be set to either true or false. 添加如下变量:
    CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.port=1090 --此端口号自定义,只要不是常用的或者系统已使用的即可,此处设置为1090
    -Dcom.sun.management.jmxremote.authenticate=true --起用用户访问权限
    -Dcom.sun.management.jmxremote.ssl=false
    -Djava.rmi.server.hostname=10.111.43.164" --此处hostname设置为要监控的进程所在机器的IP(进程本机)
    -Dcom.sun.management.jmxremote.acccess.file=/opt/apache-tomcat-7.0.57/jconsole/jmxremote.access -- 配置用户访问权限(这个目录为自定义,只要能读取到即可,无特殊要求)
    -Dcom.sun.management.jmxremote.password.file=/opt/apache-tomcat-7.0.57/jconsole/jmxremote.password"

    现在要配置访问权限的验证文件:
    首先拷贝上面启动参数多出来的两个文件
    root@ubuntu:/opt/apache-tomcat-7.0.57# mkdir jconsole
    root@ubuntu:/opt/apache-tomcat-7.0.57# cp /opt/jdk1.8.0_60/jre/lib/management/jmxremote.access ./jconsole/
    root@ubuntu:/opt/apache-tomcat-7.0.57# cp /opt/jdk1.8.0_60/jre/lib/management/jmxremote.password.template ./jconsole/jmxremote.password
    然后需要变更文件的权限(访问文件权限必须是600,否则会报错,大家可以试一试):
    root@ubuntu:/opt/apache-tomcat-7.0.57# chmod 600 ./jconsole/jmxremote.*

    下面讲讲这两个文件:
    jmxremote.access里面其实最主要的就是两行:
    monitorRole readonly --这个只的是监控角色,权限为只读,如果仅仅只监控目的使用这个权限即可
    controlRole readwrite --这个具有操作权限,可以停起server。

    jmxremote.password这个文件里面需要将最下面两行的注释给去掉,此处就是后面代码里面需要验证的用户名和密码(此处的两个用户一个是monitorRole,密码为QED;另一个用户为controlRole,密码为R&D),此处的用户名密码是可以自定义成的。
    monitorRole QED
    controlRole R&D

    自定义效果如下:
    jmxremote.access
    monitorRole-admin readonly
    controlRole-admin readwrite

    jmxremote.password
    monitorRole-admin !QAZ123
    controlRole-admin !QAZ123

    到这里服务器端的配置就结束了,下面就只要重启server即可。

    下面就到代码部分:

    String jmxURL = "service:jmx:rmi:///jndi/rmi://10.111.43.164:1090/jmxrmi";
    JMXServiceURL serviceURL = new JMXServiceURL(jmxURL);
    Map<String, String[]> map = new HashMap<String, String[]>();
    String[] credentials = new String[] { "monitorRole-admin", "!QAZ123" };
    map.put("jmx.remote.credentials",credentials);
    JMXConnector connector = JMXConnectorFactory.connect(serviceURL,map);
    MBeanServerConnection msc = connector.getMBeanServerConnection();

  • 相关阅读:
    CSS浮动(float、clear)通俗讲解
    JAVA 类的加载
    数据库操作 delete和truncate的区别
    正则表达式 匹配相同数字
    Oracle EBS OM 取消订单
    Oracle EBS OM 取消订单行
    Oracle EBS OM 已存在的OM订单增加物料
    Oracle EBS OM 创建订单
    Oracle EBS INV 创建物料搬运单头
    Oracle EBS INV 创建物料搬运单
  • 原文地址:https://www.cnblogs.com/gangdou/p/5158922.html
Copyright © 2011-2022 走看看