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

 

posted @ 2022-10-25 16:47  谢端阳  阅读(1354)  评论(0编辑  收藏  举报