JVM进程性能监控工具

1. jps — Java process state, 针对JVM进程的PS命令
相关参数:
-v 显示启动时给定的JVM参数
-q jps默认只带着类的短名称,如果指定-q则只显示pid
-l 显示完整类名
-m 显示传递给main主函数的参数,例如:

2. jinfo — 显示/设置正在运行的JVM进程的扩展参数
jinfo需要指定进程的pid,关于flag参数如下:
-flag :显示指定的JVM参数值。如果Boolean型值时则显示+,-号
-flag [+|-]:设置|取消指定参数的blog值
-flag =value
使用JVM堆内存设置和测试的测试代码,并在中间加上一行中断:

运行这个程序:

添加输出GC日志选项:

这时按回车继续程序,可以看出在运行最后打印了GC的信息:

3. jmap — 生成Java应用程序的堆快照和对象统计信息,生成的dump文件需要用工具来打开进行分析。参数:
-heap ​打印Java堆信息
-histo[:live] 打印Java的对象堆的直方图信息。如果指定live,则只统计存货的对象。
-permstat ​打印永久代统计信息
-finalizerinfo ​打印等待被终结(finalize)的对象信息

4. jstack — 显示线程堆栈信息,常用于程序卡死后的堆栈分析
-l 显示锁信息
-m 显示Java和native的信息
-F 强制dump,当jstack没有响应时使用

5. JConsole — Java SDK自带的图形化工具,非常方便。
启动时会提示选择attach到一个JVM进程上。登录后界面如下,实时窗口包括堆内存、线程、类加载和CPU使用率等四个性能概况,另外还包括一些JVM的统计信息。
jconsole1
线程面板可以诊断线程状态,堆栈(类似jstack),死锁等信息。
jconsole2

6. Visual VM — 相当于jconsole的升级版,将很多命令行工具的功能整合在一起。同样由JDK免费提供。
使用 VisualVM 进行性能分析及调优

参考

JDK Docs
葛一鸣老师的JVM课程

Posted in Dev, Java|Scala, Linux.