共计 2754 个字符,预计需要花费 7 分钟才能阅读完成。
远程监控 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. 添加如下变量:
Java_OPTS=”-Dcom.sun.management.jmxremote.port=1090 – 此端口号自定义,只要不是常用的或者系统已使用的即可,此处设置为 1090,此端口号不是 java 业务进程的端口号,所以不要混淆了。
-Dcom.sun.management.jmxremote.authenticate=false – 不起用用户访问权限
-Dcom.sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname=10.111.43.164″ 此处 hostname 设置为要监控的进程所在机器的 IP(进程本机)
第二种是配置用户权限:
找到 # OS specific support. $var _must_ be set to either true or false. 添加如下变量:
JAVA_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 即可。
root@ubuntu:/opt/apache-tomcat-7.0.57/bin# ./shutdown.sh 此处应该会出现连接的 1090 端口被占用提示,这里只需要将这个进程强制杀掉即可,jps 查到进程号,kill -9 pid
root@ubuntu:/opt/apache-tomcat-7.0.57/bin# ./startup.sh
下面就到代码部分:
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();
浅谈 JVM 的实现与垃圾回收机制 http://www.linuxidc.com/Linux/2016-01/127618.htm
在 Linux 中安装 Oracle JDK 8 以及 JVM 的类加载机制 http://www.linuxidc.com/Linux/2015-04/116491.htm
本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-03/128786.htm