简易理解:深入掌握 JVM 常用内存检查工具 - jps、jstack、jstat、jmap、jhat 的实战应用
JVM内存分析工具jps、jstack、jstat、jmap、jhat 的使用
说明
jps、jstack、jstat和jmap、jhat 等是jdk自带的内存分析工具,能够帮助我们分析堆、内存、线程的运行状况等。
jps
jps由jdk1.5以上提供,用于查看当前用户下的java进程的pid及基本信息
1、jps -help
jps的帮助命令,可用jps -h
代替:
2、jps -m
查看进程pid及main方法参数:
3、jps -q
仅显示pid:
4 、jps -v
查看pid及JVM参数:
5、 jps -l
查看pid及程序所在包名:
jstack
1)查看线程的栈信息,即JVM的当前时刻的线程快照。
2)主要用于定位线程出现长时间停顿的原因,如线程死锁、死循环、请求外部时长过长导致线程停顿的原因。
3)建议间隔一定时间采集一次,通过3-5次采集,确认是否有线程一直处于running状态,方便定位是否出现第2点的情况
用法:
jstack <PID>
jstack <PID> > test.txt #输出到文件
jstat
1)主要用于统计堆内存、类相关和GC相关信息
2)可以时时监控资源和性能
jstat -gc <pid>
jstat -gc <pid> 2s 100 #间隔2s连续输出100次
[root@lsy-36-70 ~]# jstat -gc 7574 2s 10 S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT 149760.0 149760.0 35129.5 0.0 749056.0 746427.7 1048576.0 222899.5 129280.0 122844.9 15104.0 14076.8 152 8.696 0 0.000 8.696 149760.0 149760.0 35129.5 0.0 749056.0 746540.0 1048576.0 222899.5 129280.0 122844.9 15104.0 14076.8 152 8.696 0 0.000 8.696 149760.0 149760.0 35129.5 0.0 749056.0 746687.8 1048576.0 222899.5 129280.0 122844.9 15104.0 14076.8 152 8.696 0 0.000 8.696 149760.0 149760.0 35129.5 0.0 749056.0 746731.0 1048576.0 222899.5 129280.0 122844.9 15104.0 14076.8 152 8.696 0 0.000 8.696 149760.0 149760.0 35129.5 0.0 749056.0 746745.0 1048576.0 222899.5 129280.0 122844.9 15104.0 14076.8 152 8.696 0 0.000 8.696 149760.0 149760.0 35129.5 0.0 749056.0 746878.8 1048576.0 222899.5 129280.0 122844.9 15104.0 14076.8 152 8.696 0 0.000 8.696 149760.0 149760.0 0.0 24516.0 749056.0 3428.4 1048576.0 223104.6 129280.0 122850.1 15104.0 14076.8 153 8.720 0 0.000 8.720 149760.0 149760.0 0.0 24516.0 749056.0 3670.3 1048576.0 223104.6 129280.0 122850.1 15104.0 14076.8 153 8.720 0 0.000 8.720 149760.0 149760.0 0.0 24516.0 749056.0 3734.9 1048576.0 223104.6 129280.0 122850.1 15104.0 14076.8 153 8.720 0 0.000 8.720 149760.0 149760.0 0.0 24516.0 749056.0 3881.1 1048576.0 223104.6 129280.0 122850.1 15104.0 14076.8 153 8.720 0 0.000 8.720
各指标描述:
S0C:年轻代中第一个survivor(幸存区)的容量 (字节 Capacity)
S1C:年轻代中第二个survivor(幸存区)的容量 (字节)
S0U:年轻代中第一个survivor(幸存区)目前已使用空间 (字节 Used)
S1U:年轻代中第二个survivor(幸存区)目前已使用空间 (字节)
EC:年轻代中Eden(伊甸园)的容量 (字节)
EU:年轻代中Eden(伊甸园)目前已使用空间 (字节)
OC:Old代的容量 (字节)
OU:Old代目前已使用空间 (字节)
MC:metaspace(元空间)的容量 (字节)
MU:metaspace(元空间)目前已使用空间 (字节)
CCSC:当前压缩类空间的容量 (字节)
CCSU:当前压缩类空间目前已使用空间 (字节)
YGC:从应用程序启动到采样时年轻代中gc次数
YGCT:从应用程序启动到采样时年轻代中gc所用时间(s)
FGC:从应用程序启动到采样时old代(全gc)gc次数
FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)
GCT:从应用程序启动到采样时gc用的总时间(s)
jmap
1)查看堆内存信息,包括使用的GC算法、堆配置参数和各代中堆内存使用情况,可以结合jhat使用
2)主要用于分析OOM
用法:
jmap -heap <PID>
jmap -dump:format=b,file=HeapDump <pid> #dump出内存信息,可用内存分析工具分析情况,format=b是通过二进制的意思
例如:
1)直接查看堆内存信息
[root@lsy-36-70 ~]# jmap -heap 7574 Attaching to process ID 7574, please wait... Debugger attached successfully. Server compiler detected. JVM version is 25.211-b12 using thread-local object allocation. Parallel GC with 8 thread(s) Heap Configuration: MinHeapFreeRatio = 0 MaxHeapFreeRatio = 100 MaxHeapSize = 3183476736 (3036.0MB) NewSize = 66060288 (63.0MB) MaxNewSize = 1061158912 (1012.0MB) OldSize = 133169152 (127.0MB) NewRatio = 2 SurvivorRatio = 8 MetaspaceSize = 21807104 (20.796875MB) CompressedClassSpaceSize = 1073741824 (1024.0MB) MaxMetaspaceSize = 17592186044415 MB G1HeapRegionSize = 0 (0.0MB) Heap Usage: PS Young Generation Eden Space: capacity = 562561024 (536.5MB) used = 386173616 (368.2838592529297MB) free = 176387408 (168.2161407470703MB) 68.64564012170172% used From Space: capacity = 1048576 (1.0MB) used = 720896 (0.6875MB) free = 327680 (0.3125MB) 68.75% used To Space: capacity = 14155776 (13.5MB) used = 0 (0.0MB) free = 14155776 (13.5MB) 0.0% used PS Old Generation capacity = 108003328 (103.0MB) used = 27321200 (26.055526733398438MB) free = 80682128 (76.94447326660156MB) 25.296627896503338% used 16408 interned Strings occupying 1561208 bytes.
2)dump出堆内存信息到文件
[root@lsy-36-70 ~]# jmap -dump:format=b,file=/tmp/dump01.dat 7574 Dumping heap to /tmp/dump01.dat ... Heap dump file created
3)jhat查看,浏览器输入7000端口访问
[root@lsy-36-70 ~]# jhat -port 7000 /tmp/dump01.dat
4)使用内存分析工具装载dump文件分析
heapdump工具地址
https://memory.console.heapdump.cn/detail/29833/class/default
推荐阅读
-
简易理解:深入掌握 JVM 常用内存检查工具 - jps、jstack、jstat、jmap、jhat 的实战应用
-
深入理解与实战: JVM性能优化利器 - jps、jstack、jmap、jhat、jstat的全面应用指南
-
实用的命令行工具指南:深入理解jps、jstack、jmap、jhat、jstat与hprof JVM 性能优化与监控方法" - jps: Java虚拟机进程状态工具 - 全面解读 - jstack: 一步步掌握堆栈跟踪工具 - 实战解析 - jmap & jhat: 内存映射与Java堆分析利器 - 详解篇 - jstat: JVM性能统计与监测工具 - 使用详解 - hprof: 堆/CPU性能剖析工具 - 深入学习指南