JVM性能监控工具使用说明
命令JPS
JPS(Java Virtual Machine Process Status Tool)
1)jps (显示进程ID、主类名)
2)jps -l (显示进程ID、带包的主类名)
3)jps -v (显示进程ID、主类名、jvm参数)
4)jps -lv (显示进程ID、带包的主类名、jvm参数)
命令JSTAT
JSTAT(Java Virtual Machine statistics monitoring Tool)
1)jstat -gc -h3 3609 1000 10 (分析进程id为3609的gc情况,每隔1000ms打印一次记录,打印10次停止,每3行后再次打印指标参数title名称)
2)jstat -gc 3609(通常使用上面命令,持续观察gc状态, 下面有参数解释)
3)jstat -gcutil -h5 3609 1000 20(分析进程id为3609的gc情况,每隔1000ms打印一次记录,打印20次停止,每3行后再次打印指标参数title名称)
4) jstat -gcutil 3609(通常使用上面命令,持续观察gc状态,下面有参数解释)
5)jstat -gccapacity 3609 1000 10(同理,打印的是各个内存空间的容量大小)
6)jstat -class -h5 3609 1000 20(显示加载的class的数量,及所占用的空间信息)
jstat -gc 3609参数名称 |
参数描述 |
S0C |
年轻代中第一个survivor(幸存区)的容量 (字节) |
S1C |
年轻代中第二个survivor(幸存区)的容量 (字节) |
S0U |
年轻代中第一个survivor(幸存区)目前已使用空间 (字节) |
S1U |
年轻代中第二个survivor(幸存区)目前已使用空间 (字节) |
EC |
年轻代中Eden(伊甸园)的容量 (字节) |
EU |
年轻代中Eden(伊甸园)目前已使用空间 (字节) |
OC |
Old代的容量 (字节) |
OU |
Old代目前已使用空间 (字节) |
PC |
Perm(持久代)的容量 (字节) |
PU |
Perm(持久代)目前已使用空间 (字节) |
MC |
方法区的容量 (字节) |
MU |
方法区已使用的空间(字节) |
CCSC |
压缩类空间容量(字节) |
CCSU |
压缩类空间目前已使用大小(字节) |
YGC |
从应用程序启动到采样时年轻代中gc次数 |
YGCT |
从应用程序启动到采样时年轻代中gc所用时间(s) |
FGC |
从应用程序启动到采样时old代(全gc)gc次数 |
FGCT |
从应用程序启动到采样时old代(全gc)gc所用时间(s) |
GCT |
从应用程序启动到采样时gc用的总时间(s) |
jstat -gcutil 3609参数 |
参数含义 |
S0 |
年轻代中第一个survivor(幸存区)已使用的占当前容量百分比 |
S1 |
年轻代中第二个survivor(幸存区)已使用的占当前容量百分比 |
E |
年轻代中Eden(伊甸园)已使用的占当前容量百分比 |
O |
old代已使用的占当前容量百分比 |
P |
perm代已使用的占当前容量百分比 |
M |
方法区已使用的占当前容量百分比 |
YGC |
从应用程序启动到采样时年轻代中gc次数 |
YGCT |
从应用程序启动到采样时年轻代中gc所用时间(s) |
FGC |
从应用程序启动到采样时old代(全gc)gc次数 |
FGCT |
从应用程序启动到采样时old代(全gc)gc所用时间(s) |
GCT |
从应用程序启动到采样时gc用的总时间(s) |
jstat -class 3609参数 |
参数含义 |
Loaded |
已经装载的类的数量 |
Bytes |
装载类所占用的字节数 |
Unloaded |
已经卸载类的数量 |
Bytes |
卸载类的字节数 |
Time |
装载和卸载类所花费的时间 |
JMAP
JMAP(Java Memory Map)
1)jmap -dump:format=b,file=b.txt 3609 (打印了进程3609的堆内存详情,到当前目录的b.txt文件中,需要scp到本地用MAT文件分析,方便直观的定位OOM问题)
scp appweb@10.1.17.12:/home/appweb/b.txt /home/xijiu/ (使用scp命令从服务器上将dump出的堆详情下载到跳板机上)
scp xijiu@term.xx-inc.com:/home/xijiu/b.txt ~/ (使用scp命令从跳板机上将文件下载到本地)
jvisualvm => 文件 => 装入 => 堆Dump(*.hprof,*.*)(mac电脑在iterms命令终端输入jvisualvm打开jvm自带的堆分析工具,双击类名可以打开当前类下所有实例)
2)jmap -heap 3609 (打印jvm heap的情况,GC算法、堆内存详情)
3)jmap -histo 3609 | head -n 50 (打印输出堆的详情,包括对象数量、对象大小、类名,通常对象太多,一屏很难打印完,通过使用 head -n 50 过滤前50个对象 )
4)jmap -histo:live 3609 | head -n 20 (对比上面命令,只打印当前还存活的对象)
5) jmap -clstats 3609 (打印类加载数据)
6) jmap -F histo 3609 | head -n 20 (-F在服务已死的情况下使用,表示强制输出)
7)jmap -F -dump:format=b,file=a.hprof 3609 (-F在服务已死的情况下使用,表示强制输出)
JSTACK
JSTACK(Java Virtual Machine Stack Trace for Java)用于显示虚拟机的线程快照,jstack命令用于生成虚拟机当前时刻的线程快照(一般称为threaddump或javacore文件)。线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如请求外部资源导致的长时间等待、线程间死锁、死循环等都是导致线程长时间停顿的常见原因。线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做些什么事情,或者等待着什么资源。
1)jstack -F 3609 | head -n 50 (当正常输出的请求不被响应时,强制输出线程堆栈, 内容太多可以用head命令取前50行数据)
2) jstack -l 3609 (除线程快照外,还打印了锁的附加信息)
3)jstack -m 3609 (如果调用本地方法栈,还显示C++的调用栈)
4) jstack -l 3609 > aa1.log (多次执行该命令,生成文件,来对比前后的线程快照)
PSTREE
PSTREE(pstree命令将所有线程以树状图显示)
1) pstree (显示当前虚拟机上所有的进程)
2) pstree -u appweb (显示指定用户appweb下的进程,其余的就是root下的进程)
3)pstree -apnh (显示进程之间的关系)
4) pstree 2594 (打印进程的线程使用情况)
TOP
TOP(top 查看资源使用情况)
1) top (显示进程信息;在top基本视图中,按键盘数字“1”,可监控每个逻辑CPU的状况;敲击键盘“x”(打开/关闭排序列的加亮效果);默认按照cpu使用率降序排列,通过”shift + >”或”shift + <”可以向右或左改变排序列;)
2) top -c (显示完整命令)
3)top -p 2594 (显示指定的进程信息)
4) top -d 3 -p 2594 (显示进程2594的信息,每隔3秒更新一次数据)
5)top -n 10 -d 1 -p 2594 (每隔1秒更新一次信息,更新10次之后,终止更新并退出)
6) top -Hp 2594 (查看进程内线程资源使用情况)
JVM中系统变量