Windows 微软 java google 开源 wordpress php apache Android linux centos mysql linux命令 shell nginx HTML5 Python Firefox 程序员 Ubuntu

使用JConsole远程监控JVM

JConsole是从JAVA 5中开始引入的一个用于对JVM性能和资源消耗进行监控的图形化工具。

JConsole可以连接本地的Java程序,也可以连接远程的Java程序。由于是GUI的方式使用,所以就不细说那些基本的使用方法了,这里只是记录一下试用过程中遇到的几个小问题及其解决方案。

这里使用的是SPECjbb2005这个benchmark中的Java来做了一下试验,因为它也是一个Java Application的benchmark,可以在run.sh脚本中对“JAVA_OPTIONS=”这一行进行相应的定制。

1. 要实现让JConsole可以远程连接到某个Java程序,则需要在Java程序启动的JAVA_OPTION中添加选项“com.sun.management.jmxremote.port=8888”来指定远程管理的端口。

2. 启动Java程序时,遇到如下报错:

[root@localhost SPECjbb2005]# ./run.sh
Thu Jul 25 23:00:50 CST 2013
 
./jbb.jar:./check.jar:
java full version "1.6.0_24-b24"
Error: Password file not found: /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/management/jmxremote.password
Thu Jul 25 23:00:50 CST 2013

这是由于开启Java JMX 远程管理时,默认会有用户名密码的验证,所以需要相应的密码文件。

[root@localhost SPECjbb2005]# ls /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/management/ jmxremote.access jmxremote.password.template management.properties snmp.acl.template

需要先在jmxremote.access中定义用户权限,然后在jmxremote.password文件中定义用户名和对应的密码,jmxremote.password文件可以复制jmxremote.password.template模板文件来进行修改。

当然,在内网中仅仅用于调试,我们一般可以不设置密码验证和SSL连接方式,Java选项如下:

-Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false

3. 在进行了端口和认证信息的配置后,发现在JConsole中通过ip远程连接JVM依然不成功。

错误信息为:Connection Failed: Retry? The connection to 192.168.52.11:8888 did not succeed. Would you like to try again?

在启动Java时,需要设置RMI远程调用的主机名,一般设置为主机的IP地址即可,如下:

-Djava.rmi.server.hostname=192.168.52.11

(当然,也有可能是由于前面第2点中提到的SSL的设置问题,依然需要检查一下)

关于JConsole,还是得执行看看Oracle的这篇Java SE 6 中的JConsole的描述:http://docs.oracle.com/javase/6/docs/technotes/guides/management/jconsole.html

(特别是上面文档中对监控数据、图形代表的意义是需要认真理解的)

延伸阅读

评论