JVM监控—jmap命令

语法:jmap [option] <pid>
option选项:
-heap  :显示堆详细信息
-histo[:live]  :显示堆中对象的统计信息,如果指定了live子选项,则只计算活动的对象
-dump:<dump-options>  :生成堆转储快照dump文件

1、jmap pid
查看进程的内存映像信息,使用的动态库
例子:jmap 5313

Attaching to process ID 5313, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.231-b11
0x0000000000400000	8K	/appserver/jdk1.8.0_231/jre/bin/java
0x00007fdfd6b0b000	66K	/usr/lib64/libbz2.so.1.0.6
0x00007fdfd6d1b000	153K	/usr/lib64/liblzma.so.5.2.2
0x00007fdfd6f41000	88K	/usr/lib64/libz.so.1.2.7
0x00007fdfd7157000	97K	/usr/lib64/libelf-0.176.so
0x00007fdfd736f000	19K	/usr/lib64/libattr.so.1.1.0
0x00007fdfd7574000	330K	/usr/lib64/libdw-0.176.so
0x00007fdfd77c5000	19K	/usr/lib64/libcap.so.2.22
0x00007fdfd79ca000	84K	/usr/lib64/libnss_myhostname.so.2
0x00007fdfd7bdf000	107K	/usr/lib64/libresolv-2.17.so
0x00007fdfd7df9000	30K	/usr/lib64/libnss_dns-2.17.so
0x00007fe018348000	86K	/usr/lib64/libgcc_s-4.8.5-20150702.so.1
0x00007fe018563000	276K	/appserver/jdk1.8.0_231/jre/lib/amd64/libsunec.so
0x00007fe018acf000	50K	/appserver/jdk1.8.0_231/jre/lib/amd64/libmanagement.so
0x00007fe018de9000	110K	/appserver/jdk1.8.0_231/jre/lib/amd64/libnet.so
0x00007fe02c0ae000	91K	/appserver/jdk1.8.0_231/jre/lib/amd64/libnio.so
0x00007fe02f502000	124K	/appserver/jdk1.8.0_231/jre/lib/amd64/libzip.so
0x00007fe02f71e000	60K	/usr/lib64/libnss_files-2.17.so
0x00007fe02f931000	226K	/appserver/jdk1.8.0_231/jre/lib/amd64/libjava.so
0x00007fe02fb60000	64K	/appserver/jdk1.8.0_231/jre/lib/amd64/libverify.so
0x00007fe02fd6f000	42K	/usr/lib64/librt-2.17.so
0x00007fe02ff77000	1110K	/usr/lib64/libm-2.17.so
0x00007fe030279000	16650K	/appserver/jdk1.8.0_231/jre/lib/amd64/server/libjvm.so
0x00007fe031263000	2105K	/usr/lib64/libc-2.17.so
0x00007fe031631000	18K	/usr/lib64/libdl-2.17.so
0x00007fe031835000	106K	/appserver/jdk1.8.0_231/jre/lib/amd64/jli/libjli.so
0x00007fe031a4d000	138K	/usr/lib64/libpthread-2.17.so
0x00007fe031c69000	159K	/usr/lib64/ld-2.17.so

2、jmap -heap <pid>
例子:jmap -heap 5313

Attaching to process ID 5313, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.231-b11

using thread-local object allocation.
Parallel GC with 2 thread(s)

Heap Configuration:
   MinHeapFreeRatio         = 0
   MaxHeapFreeRatio         = 100
   MaxHeapSize              = 482344960 (460.0MB)
   NewSize                  = 10485760 (10.0MB)
   MaxNewSize               = 160432128 (153.0MB)
   OldSize                  = 20971520 (20.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 = 21495808 (20.5MB)
   used     = 1891648 (1.80401611328125MB)
   free     = 19604160 (18.69598388671875MB)
   8.80007860137195% used
From Space:
   capacity = 1572864 (1.5MB)
   used     = 1048576 (1.0MB)
   free     = 524288 (0.5MB)
   66.66666666666667% used
To Space:
   capacity = 1572864 (1.5MB)
   used     = 0 (0.0MB)
   free     = 1572864 (1.5MB)
   0.0% used
PS Old Generation
   capacity = 56098816 (53.5MB)
   used     = 43251320 (41.24767303466797MB)
   free     = 12847496 (12.252326965332031MB)
   77.09845427040742% used

29872 interned Strings occupying 2700008 bytes.

3、jmap -histo:live <pid>
例子:jmap -histo:live 5313 > /tmp/a.log
能显示对象的实例个数、占用的字节数、类的名称
cat a.log | head -n 20

 num     #instances         #bytes  class name
----------------------------------------------
   1:         85992        9718248  [C
   2:         84880        2037120  java.lang.String
   3:          3183        1875736  [B
   4:         12926        1661344  [Ljava.lang.Object;
   5:         46829        1498528  java.util.concurrent.ConcurrentHashMap$Node
   6:         15142        1332496  java.lang.reflect.Method
   7:         10866        1224384  java.lang.Class
   8:         25368         811776  java.util.HashMap$Node
   9:           311         538336  [Ljava.util.concurrent.ConcurrentHashMap$Node;
  10:          3546         371536  [Ljava.util.HashMap$Node;
  11:         11578         370496  java.lang.ref.WeakReference
  12:          5712         339960  [I
  13:         12847         308328  org.apache.catalina.loader.ResourceEntry
  14:           468         307008  io.netty.util.internal.shaded.org.jctools.queues.MpscArrayQueue
  15:         12102         290448  org.springframework.core.MethodClassKey
  16:         16414         262624  java.lang.Object
  17:          5437         217480  java.lang.ref.SoftReference

4、jmap -dump:<dump-options> pid
例子:jmap -dump:live,format=b,file=/tmp/b.dump 5313

Dumping heap to /tmp/b.dump ...
Heap dump file created

生成的是二进制文件,可以用jdk自带工具jvisualvm.exe打开分析,为什么这个对象数量很多,是由谁引用的,堆溢出一般是没有及时回收内存

参考资料:
https://www.cnblogs.com/kongzhongqijing/articles/3621163.html
 

猜你喜欢

转载自blog.csdn.net/csj50/article/details/113758826