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到文件中的。

已经在/root下生成了dump.dat文件
4、jhat对dump文件进行分析
在上一小节中,我们将jvm的内存dump到文件中,这个文件是一个二进制的文件,不方便查看,这时我们可以借助于jhat工具进行查看。
打开浏览器进行访问:http://192.168.0.108:9998

如果访问不了,需要防火墙开放9998端口。
在最后面有OQL查询功能 。

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

Last updated
Was this helpful?