原创

调优-基于JVisualVM的可视化监控

2、基于JVisualVM的可视化监控

2.1 监控本地java进程

JDK的bin路径下 C:\Program Files\Java\jdk1.8.0_60\bin\jvisualvm.exe

多语言文档 http://visualvm.github.io/documentation.html

可以直接查看本机的java进程、远程java进程、也可以直接导入.hprof文件(类似MAT内存分析工具)

可以在"概要"面板中看到OutOfMemoryError、死锁、死循环等报告

可以在"抽样器"面板中对cpu和内存进行抽样,这样就可以看到哪些方法占用的时间较长。

还可以选择某个方法进行"线程Dump",从而可以分析一下异常信息

安装JVisualVM插件

https://visualvm.github.io/pluginscenters.html

选择对应JDK版本区间的配置地址,(执行java -version),点击工具 > 工具 > 插件 >
新增地址 > 在切换到可用插件并选择Visual GC和BTrace Workbench > 重启JVisualVM

2.2 监控远程的java进程

修改 catalina.sh

JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.port=9004 
-Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.ssl=false 
-Djava.net.preferlPv4Stack=true 
-Djava.rmi.server.hostname=192.168.50.91"

#特别注意,不同网段的ip直接虚拟主机可能连不上

修改 /usr/mylibs/tomcat7/apache-tomcat-7.0.73/bin/catalina.sh

搜索/JAVA_OPTS,按N下一个,找到JAVA_OPTS="$JAVA_OPTS $JSSE_OPTS",在这前面粘贴上面的配置,并重启tomcat

由于linux上总是出现一些连接问题,暂时在window上测试。

特别注意:window上应该是使用.bat的配置和启动,实测连接失败。

然后修改catalina.sh,并启动startup.sh(自动使用Git Bash工具启动)

在JVisualVM > 远程 > 添加远程主机 > 右击添加JMX连接 > 端口号9004 连接成功

(window下重启tomcat,最好先杀掉java进程)

tomcat启动测试 http://192.168.50.91:8080/examples/

相关的连接应该出现在远程的节点下,但是实测出现在本地节点中

2.3 监控远程普通的java进程

注意这时的端口改成9005

添加启动参数

hohup java -Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.port=9005 
-Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.ssl=false 
-Djava.net.preferlPv4Stack=true 
-Djava.rmi.server.hostname=192.168.50.91 -jar java-optimization-and-debug-for-prod-env-0.0.1-SNAPSHOT.jar &

以上在linux中可能无法访问

window下(不支持换行,所以在文本编辑中去掉换行符)

java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9005 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.net.preferlPv4Stack=true -Djava.rmi.server.hostname=192.168.50.91 -jar java-optimization-and-debug-for-prod-env-0.0.1-SNAPSHOT.jar

右击添加JMX连接 > 端口号9005 连接成功

相关的连接应该出现在远程的节点下,但是实测出现在本地节点中

window下访问测试 http://192.168.50.91:12345/heap 内存溢出

启动多个请求,内存占用到99%后,JVisualVM自动退出了。

应该可以在"监视”面板中查看堆的信息,并点击"堆dump”后,然后分析对象

再次测试死锁问题 访问 http://192.168.50.91:12345/deadlock

一段时间后在"线程"版本中提示检测到死锁,并"线程dump"

avatar

正文到此结束
本文目录