11.6.jmap使用详解

前面通过jstat可以对jvm堆的内存进行统计分析,而jmap可以获取到更加详细的内容。如:内存使用情况的汇总、对内存溢出的定位与分析。

1、查看内存使用情况

[root@myshop02 bin]# jmap -heap 3694
Attaching to process ID 3694, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.202-b08

##我这边用的是G1垃圾收集器
using thread-local object allocation.
Garbage-First (G1) GC with 1 thread(s)

Heap Configuration:#堆内存配置信息
   MinHeapFreeRatio         = 40
   MaxHeapFreeRatio         = 70
   MaxHeapSize              = 1073741824 (1024.0MB)
   NewSize                  = 1363144 (1.2999954223632812MB)
   MaxNewSize               = 643825664 (614.0MB)
   OldSize                  = 5452592 (5.1999969482421875MB)
   NewRatio                 = 2
   SurvivorRatio            = 8
   MetaspaceSize            = 21807104 (20.796875MB)
   CompressedClassSpaceSize = 1073741824 (1024.0MB)
   MaxMetaspaceSize         = 17592186044415 MB
   G1HeapRegionSize         = 1048576 (1.0MB)

Heap Usage:# 堆内存的使用情况
G1 Heap:#G1堆情况
   regions  = 1024
   capacity = 1073741824 (1024.0MB)
   used     = 45869552 (43.74461364746094MB)
   free     = 1027872272 (980.2553863525391MB)
   4.271934926509857% used
G1 Young Generation:#年轻代
Eden Space:
   regions  = 26
   capacity = 79691776 (76.0MB)
   used     = 27262976 (26.0MB)
   free     = 52428800 (50.0MB)
   34.21052631578947% used
Survivor Space:
   regions  = 4
   capacity = 4194304 (4.0MB)
   used     = 4194304 (4.0MB)
   free     = 0 (0.0MB)
   100.0% used
G1 Old Generation:##G1老年代
   regions  = 14
   capacity = 50331648 (48.0MB)
   used     = 14412272 (13.744613647460938MB)
   free     = 35919376 (34.25538635253906MB)
   28.63461176554362% used

16879 interned Strings occupying 1583944 bytes.

2、查看内存中对象数量及大小

#对象说明 B byte C char D double F float I int J long Z boolean [ 数组,如[I表示int[] [L+类名 其他对象

3、将内存使用情况dump到文件中

有些时候我们需要将jvm当前内存中的情况dump到文件中,然后对它进行分析,jmap也是支持dump到文件中的。

1590291361602

已经在/root下生成了dump.dat文件

4、jhat对dump文件进行分析

在上一小节中,我们将jvm的内存dump到文件中,这个文件是一个二进制的文件,不方便查看,这时我们可以借助于jhat工具进行查看。

打开浏览器进行访问:http://192.168.0.108:9998arrow-up-right

1590291950194

如果访问不了,需要防火墙开放9998端口。

在最后面有OQL查询功能 。

1590292032843

点开之后可以执行OQL查询语句,如下,左侧是查询结果,字符串长度>=100的都查询出来了

1590292109507

Last updated

Was this helpful?