jvm 性能监控与分析工具

1. jps

jvm 进程状态统计
-l 输出对应应用主方法的完整包名或者jar的完整路径名 (常用于确定 所观察应用的lvmid, 性能分析的第一步)
-m 输出传递给主方法的参数
-v 输出 jvm参数

2. jinfo

查看/设置进程的系统参数及jvm 参数(人工设置与默认设置)
例:查看lvmid的gc详情,使用如下命令为运行中的程序配置jvm参数(功能同在 应用启动前做jvm配置 -XX:+PrintGCDetails)
jinfo -flag +PrintGCDetails lvmid
这里写图片描述

3. jstat

记录虚拟机运行的状态,监控性能 ( gc)
示例:
jstat -gcutil 21891 250 7
S0 S1 E O M CCS YGC GCT FGC FGCT GCT
0.00 97.02 70.31 66.80 95.52 89.14 7 0.300 0 0.000 0.300
0.00 97.02 86.23 66.80 95.52 89.14 7 0.300 0 0.000 0.300
0.00 97.02 96.53 66.80 95.52 89.14 7 0.300 0 0.000 0.300
91.03 0.00 1.98 68.19 95.89 91.24 8 0.378 0 0.000 0.378
91.03 0.00 15.82 68.19 95.89 91.24 8 0.378 0 0.000 0.378
91.03 0.00 17.80 68.19 95.89 91.24 8 0.378 0 0.000 0.378
91.03 0.00 17.80 68.19 95.89 91.24 8 0.378 0 0.000 0.378
参数解释:21891:pid, 250:采样间隔,7: 采样次数,gcutil 观察gc的情况。发现更多options,jstat -options,详见此处
第3,4条记录表明 新生代发生了gc (YGC 7->8 ),时长 0.078s( 0.378-0.300), 新生代(S0,S1,E )与老生代(O)所占空间比例发生变化(新生代中对象 存活对象向老生代迁移)

4. jmap

生成 堆转储快照 heapdump 或 dump文件, 用于分析 内存分配,gc 回收等信息,常用于进行内存泄漏分析(哪个对象占用空间最大,如何长期占用内存未被释放,详见下章案例分析,这点很重要);
jmap -dump:live, format=b, file=filename lvmid
查看 堆所采用的垃圾回收机制
jmap -heap lvmid

5. jstack

生成当前时刻的线程快照 threaddump 或 javacore 文件; 用于分析线程长时间停顿 (如 线程间死锁,长时间请求外部资源等)
常用选项
-l
Long listing. Prints additional information about locks such as a list of owned java.util.concurrent ownable synchronizers.
-F
Force a stack dump when jstack [-l] pid does not respond.
-m
Prints a mixed mode stack trace that has both Java and native C/C++ frames.

6. visualVM

命令行使用不舒服的话,可以使用可视化分析工具。oracle官方推荐的all in one 性能分析工具,以上命令行的功能全在其中。
给张样图,cpu,内存,gc,线程等信息全包含
这里写图片描述

更多监控工具

上一篇:JVM优化策略
下一篇:JVM GC优化思路

代码交流 2021