前言
对于JVM的性能监控,主要注意以下关键参数,通过jdk自带的命令行工具,即可查看相关参数,从而分析系统或目标服务程序中存在的性能瓶颈
JVM Process Status Tool的缩写,JVM进程状况工具。
主要功能: 列出正在运行的java进程,并显示执行主类的名称及进程在本地JVM中的ID。
与ps命令相似,可以查看java进程ID(LVMID)。 使用方法:
jps [options][hostid]
[options]:-q: 只输出LVMID
-m: 输出JVM启动时传给主类的方法
-l:输出主类的全名,如果是Jar则输出jar的路径
-v: 输出JVM启动参数
JVM Statistics Monitoring Tool的缩写,JVM统计信息监控工具。
主要功能:监控JVM各种运行状态信息,如虚拟机进程中的类装载、内存、GC、JIT编译等数据。
使用方法:
jstat [options vmid [interval [s|ms] [count] ]]
参数解释:
Options — 选项,一般使用 -gcutil 查看gc情况
vmid — VM的进程号,与LVMID一致,使用jps查看
interval– 间隔时间,单位为秒或者毫秒
count — 打印次数,如果缺省则打印无数次
注:
1、本地JVM进程:与LVMID一致,使用jps查看
2、远程JVM进程:[protocol:][//]LVMID[@hostname[:post]/servername]
远程查看,需在目标服务上启动jstatd服务。
下面我们看下options选项:
JVM Memory Map for Java的缩写,Java内存映像工具。
主要功能:
使用方法:
jmap [ option ] pidpid 与LVMID一致,使用jps查看
注:使用jmap的时候JVM会处于假死状态,所以只能在服务已死,但进程还在的情况下使用。
JVM Stack Trace for Java的缩写,堆栈跟踪工具。
主要功能:
使用方法:
jstack [options] vmid
options: -F 当正常输出的请求不响应时,强制输出线程堆栈(jstack [-l] pid无法响应时,强制打印堆栈)
-l 除堆栈信息外,显示关于锁的附加信息
-m 打印混合模式(Java和本地C/C++帧)的堆栈跟踪信息。
-h 打印帮助信息。
-help 打印帮助信息。
用来分析java堆的命令,可以将堆中的对象以html的形式显示出来,包括对象的数量,大小等等,并支持对象查询语言
java堆栈dump来源方式: 有以下几种方式可以生成一个Java heap dump:
访问 http://localhost:7000,就可以查看详细的内存信息
有时dump出来的堆很大,在启动时会报堆空间不足的错误,可以使用如下参数: jhat -J-Xmx1024m <heap dump file>
这些命令都在jdk的bin目录里,是jdk自带的一些监控分析工具,如果你在bin目录下没有找到对应的工具,说明该版本的jdk已经去除了该命令的支持。
在笔者日常性能测试诊断调优时,最常用的组合是jps和jstack,再加上第三方的分析工具。后续会介绍第三方的分析工具。