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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!