VisualVM是JDK自带的一款全能型性能监控和故障分析工具,包括对CPU使用、JVM堆内存消耗、线程、类加载的实时监控,内存dump文件分析,垃圾回收运行情况的可视化分析等,对故障排查和性能调优很有帮助。在windows中安装JDK后,VisualVM位于%JAVA_HOME%/bin/下,直接执行jvisualvm.exe即可,一个主要运行界面如图:



jprofile 远程监控windows上的jvm jvisualvm远程监控服务器_JAVA



VisualVM会自动检测本机运行中的JVM并建立连接,本文主要介绍连接远程 Linux 服务器的配置方法, 测试 环境为CentOS 6.5,JDK8,Tomcat8。


VisualVM连接远程服务器有两种方式:JMX和jstatd,两种方式都不能完美支持所有功能,例如JMX不支持VisualGC,jstatd不支持CPU监控,实际使用可同时配置上并按需选用。



jstatd方式连接:


1. 关闭Linux服务器的防火墙:


任意路径下输入命令: service iptables stop



2. 任意路径下输入命令:


cp $JAVA_HOME/jre/lib/management/jmxremote.password.template jmxremote.password


然后打开 jmxremote.password 文件,去掉  # monitorRole  QED 和 # controlRole  R&D  这两行前面的注释符号。


再修改权限


chmod 600 jmxremote.password



3. cd $JAVA_HOME/bin, 查看文件:


cat jstatd.all.policy


文件内容应该是:


grant codebase "file:${java.home}/../lib/tools.jar" { 

 

  permission java.security.AllPermission; 

 

  };


如果不是,则改为这个内容。



4. 当前目录运行命令:


jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=172.16.80.90 &


若运行报错,检查/etc/hosts文件中是否配置hostname,在此文件添加一行 127.0.0.1 服务器名称



  打开jvisualvm, 右键Remort,选择 "Add Remort Host...",在弹出框中输入你的远端IP,比如172.16.80.90. jstatd方式自动连接成功.



完成上面的步骤后,继续打开JMX连接方式:


1. 进入tomcat安装目录bin文件夹下:


cd /usr/share/apache-tomcat-8.5.20/bin



2. 编辑vi catalina.sh, 在文件中:


# Uncomment the following line to make the umask available when using the
 
# org.apache.catalina.security.SecurityListener
 
#JAVA_OPTS="$JAVA_OPTS -Dorg.apache.catalina.security.SecurityListener.UMASK=`umask`"


这段下面添加以下内容:

JAVA_OPTS="$JAVA_OPTS -Djava.rmi.server.hostname=172.16.80.90 

 

  -Dcom.sun.management.jmxremote.port=18999 

 

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

 

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


保存文件



3. 然后./shutdown.sh关闭tomcat, ./startup.sh重启tomcat.


4. VisualVM中,在远程机器上右键add jmx connnection, 连接:172.16.80.90:18999, 不需要用户名和密码,直接确定就连上了。



如果出现VisualVM的visual GC插件没有:


1、可选择先下载一个 VisualGC的离线插件安装包,下载地址:


2、打开Java VisualVM 在VisualVM》工具》插件》已下载 ,点击添加插件,选择下载的插件打开,再勾选此插件点击安装,等待安装完成后,在已安装下就能看到此插件了,再重启VisualVM后就可以看到VisualGC模块了。