JVM 监控工具学习笔记
JPS 可以输出JVM中运行的进程状态信息
jps [命令行参数] [服务器]
服务器如果不指定的话就是默认当前服务器,命令行参数有下面几种选项:
[-q] 不输出类名、jar名和传入Main方法的参数
[-m] 输出传入main或者jar方法的参数
[-l] 输出main类或者jar的全限名
[-v] 输出传入jvm的参数
JPS -v
JSTACK 可以用来查看某个java进程内的线程堆栈信息,命令行参数有下面几种选项:
jstack [命令行参数] [PID]
jstack [命令行参数] executable core
jstack [命令行参数] [server-id@]remote-hostname-or-ip
[-l] 在发生死锁时,可以通过jstack -l pid来观察锁的持有情况。
[-m] 不仅输出java堆栈信息,还可以输出C/C++堆栈信息
示例根据找出一个某个java进程中最耗费CPU的线程,并定位到堆栈信息。
-
第一步找出JAVA进程,可以使用上面JPS命令或者“ps -ef | grep [系统名] ” 找到进程PID
image.png -
然后,使用“top -Hp PID” 命令找出当前进程中最耗资源的线程,可以根据图中“TIME”列和“CPU”列判断。
image.png -
打印该线程的十六进制值,使用命令“printf "%x\n" 1101”
image.png
4.使用JSTACK命令输出当前堆栈信息,“jstack 1100 | grep 44d”,可以看到CPU资源消耗在main入口方法
image.png
JSTAT JVM统计监测工具,命令行参数有下面几种选项:
jstat [ generalOption | outputOptions ]
使用命令“ jstat -gc 1100 250 4”可以输出GC的相关信息。图中参数1100代表当前PID,250表示采样时间为250ms,4代表采样数为4. 图中各个指标的含义分别是:
S0C、S1C、S0U、S1U:Survivor 0/1区容量(Capacity)和已使用量(Used)
EC、EU:Eden区容量和使 量
OC、OU:年 代容量和使 量
PC、PU:永久代容量和使 量
YGC、YGT:年轻代GC次数和GC耗时
FGC、FGCT:Full GC次数和Full GC耗时
GCT:GC总耗时
jstat -gc 1100 250 4
还有几个工具暂时未上手使用,未完待续~