jvisualVM:JVM监控分析工具使用介绍

概述:本文介绍关于GC、线程等JVM通用指标监控的一些常用方式,重点介绍jvisualvm工具使用。

1、远端服务器需启动jstatd,进入服务器jdk的bin目录,新建配置文件:jstatd.all.policy,内容为“grant codebase "file:#jdk安装目录/lib/tools.jar" { permission java.security.AllPermission; }; “

image

2、启动jstatd监听端口(端口需无其他进程占用),启动参数: ./jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=192.168.241.136 -p10086 &
image
3、本地也需安装jdk,在安装路径的bin目录下,运行jvisualvm.exe
image
4、安装常用插件:
image
5、添加远程主机:
image
6、监控GC、内存、线程、CPU等常用信息

6.1)GC监控: 根据服务的部署及配置情况制定GC、FGC监控指标,如有涉及复杂处理逻辑的接口、服务(例:大量数据处理、频繁对象处理、大对象处理、复杂逻辑、复杂调用、批次处理等等),建议在压测/稳定性测试过程中监控服务GC是否正常。

单节点GC监控指标示例(仅供参考,由业务服务情况评估而定): Minor GC执行不应低于10秒1次;Minor GC执行时间不应超过50ms;Full GC执行时间不应超过1s;Full GC执行频率不应高于10分钟1次; 其中FGC的执行频次、耗时通常是最重要的一个指标。

6.1.1 ) Visual GC插件监控GC情况,相较于服务器上使用jstat等命令行工具,本工具过程可视化且可远程监控,更加的方便。

image
6.1.2 )在服务器使用jstat、jmap命令监控GC情况:
image
6.2 )监视插件,根据堆内存使用曲线图看是否有内存泄漏,正常的堆内存曲线图应该是平稳的锯齿状如下图(代表JVM每次回收的内存和原有分配的内存大小基本一致,不存在部分内存未回收的情况):
image
如果存在内存泄漏,堆内存曲线图大部分情况是逐步上升的不规则锯齿状曲线(代表JVM回收的内存少于原有使用的栈内存,存在泄漏),下图举了一个极端例子:
image
6.3 )可以使用死锁监测插件查看线程的状态及是否存在线程死锁,重点关注 红色线程(代表死锁),发生死锁时顶部也会提示,Therads inspector中选中死锁的线程然后 右上角执行线程dump,可以打印出死锁线程的堆栈信息方便定位问题代码。
image
image
6.4 )使用抽样器可以统计出内存、CPU占用率较高的类。
image
7、其他一些常用场景模拟方法的参考:
手动触发FGC: https://blog.csdn.net/fanfan4569/article/details/106324233
手动触发YGC: https://blog.csdn.net/fanfan4569/article/details/106178893
jvm排查内存内漏: https://www.jianshu.com/p/e69fb428786f
死锁分析: https://blog.csdn.net/paincupid/article/details/47441187

你可能感兴趣的:(jvisualVM:JVM监控分析工具使用介绍)