jvisualvm工具

jvisualvm是SUN/Oracle JDK自带的JVM运行状态监测工具,能够获取JVM运行状态的各种信息,包括Thread Dump和Heap Dump,在可以使用的情况下建议使用此工具监测JVM运行状态。

连接远程JVM

jvisualvm只能远程连接启用了JMX远程监测的JVM,JVM启动时需要设置一些系统属性来启用JMX远程监测。

JVM中JMX相关的配置文件及说明位于固定位置,一般位于“JDK/ jre/lib/management”,其中有JMX配置的模板文件。因为一般JDK在服务器上是公用的,因此不应该直接在此位置更改JMX配置,而应该复制其中的文件后更改,并在JVM的启动参数中指定使用更改后的文件。

在JVM启动参数中指定JMX配置文件的方式为:-Dcom.sun.management.config.file=<somewhere>.management.properties,JMX的配置信息在此文件中设置,下面描述JMX配置文件中的典型配置。

  • 无认证方式

启用JMX并且不进行认证,此时任何JMX客户端都可以远程连接到此JVM进行远程监测,因此安全性很差,但在开发调试和测试环境中较为方便。在JVM启动参数中设置“-Dcom.sun.management.config.file=C:\JMXRemote\java.noauth.management.properties”,同时在JMX配置文件(C:\JMXRemote\java.noauth.management.properties)中设置下面的值:

#设置JMX端口号,JMX客户端连接时使用此端口

com.sun.management.jmxremote.port=9999

#设置JMX不使用SSL连接

com.sun.management.jmxremote.ssl=false

#设置JMX客户端连接本JVM时无需身份认证

com.sun.management.jmxremote.authenticate=false

上述设置后启动JVM,则任何JMX客户端均可以连接此JVM并进行JVM运行状态监测。

  • 认证方式

启用JMX且需要身份认证,只有认证通过的JMX客户端才能够连接到此JVM进行监测。在JVM启动参数中设置“-Dcom.sun.management.config.file=C:\TEMP\JMXRemote\auth\management.properties”,并在此文件中设置下列值:

#设置JMX端口号,JMX客户端连接时使用此端口

com.sun.management.jmxremote.port=9999

#设置JMX不使用SSL连接

com.sun.management.jmxremote.ssl=false

#设置JMX客户端连接本JVM时需要身份认证

com.sun.management.jmxremote.authenticate=true

#设置身份认证文件地址

com.sun.management.jmxremote.password.file=C:/TEMP/JMXRemote/auth/jmxremote.password

#设置角色文件地址

com.sun.management.jmxremote.access.file=C:/TEMP/JMXRemote/auth/jmxremote.access

注意:access和password文件必须正确设置才能生效,建议只改动password文件中的口令以避免其他错误。而且jmxremote.password文件必须正确设定其在文件系统中的权限,否则JVM无法启动,通常需要设置为此文件只有所有者能够访问。如果需要设置JMX Server的监听地址,可以设置下列参数:

-Djava.rmi.server.hostname=x.x.x.x"

上述设置后启动JVM,则任何JMX客户端均可以连接此JVM并进行JVM运行状态监测。

当设置了JMX远程监测后启动JVM(如启动Tomcat)后,可以在其他机器上用jvisualvm远程监测此JVM(如Tomcat),过程如下:

启动jvisualvm,增加远程主机(即配置了JMX的JVM所在的主机),如下图:

image

输入远程主机地址,如下图:

image

确定后,增加JMX连接,如下图:

image

输入JMX连接信息,JMX端口信息即是com.sun.management.jmxremote.port=9999中设定的端口号,如下图:

image

确定后,如果JMX配置为无认证需求,则连接完成;否则将要求输入JMX连接用户名和口令,即在文件com.sun.management.jmxremote.password.file=<password_file>中设置的用户名和口令。如下图:

image

用户名和口令验证成功后连接完成,如下图:

image

获取Thread Dump

直接在jvisualvm中获取Thread Dump,如下图:

image

Thread Dump的结果如下图:

image

在其中进行Thread Dump分析即可。

获取Heap Dump

直接在jvisualvm中获取Heap Dump,如下图:

image

执行Heap Dump后将提示Heap Dump创建位置,如下图:

image

确定后将创建Heap Dump文件,之后在MAT中分析此文件即可。

posted @ 2016-03-07 10:29  熊猫太郎  阅读(727)  评论(0编辑  收藏  举报