jmap 工具
1163 字大约 4 分钟2024年12月3日
生成堆转储
使用-dump
选项可以生成堆转储(heap dump)文件,这对于分析内存泄漏和其他内存相关问题非常有用:
jmap -dump:format=b,file=<filename> <PID>
示例:
jmap -dump:format=b,file=heap_dump.hprof 12345
这将生成一个名为heap_dump.hprof
的堆转储文件,供后续分析使用。
打印堆摘要
使用-heap
选项可以打印堆的详细摘要信息,包括垃圾收集器、堆配置和使用情况等:
jmap -heap <PID>
示例输出:
Attaching to process ID 12345, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 1.8.0_201
using thread-local object allocation.
Garbage-First (G1) GC with 4 thread(s)
Heap Configuration:
MinHeapFreeRatio = 40
MaxHeapFreeRatio = 70
MaxHeapSize = 1073741824 (1024.0MB)
NewSize = 1310720 (1.25MB)
MaxNewSize = 17592186044415 MB
OldSize = 5439488 (5.1875MB)
NewRatio = 2
SurvivorRatio = 8
MetaspaceSize = 21807104 (20.796875MB)
CompressedClassSpaceSize = 1073741824 (1024.0MB)
MaxMetaspaceSize = 17592186044415 MB
G1HeapRegionSize = 0 (0.0MB)
Heap Usage:
G1 Heap:
regions = 2048
capacity = 1090519040 (1038.75MB)
used = 1048576 (1.0MB)
free = 1089470464 (1037.75MB)
0.0962471971272651% used
字段解释:
- MinHeapFreeRatio / MaxHeapFreeRatio:最小和最大堆空闲比率。
- MaxHeapSize:最大堆大小。
- NewSize / MaxNewSize:新生代初始和最大大小。
- OldSize:老年代初始大小。
- NewRatio:新生代和老年代的大小比率。
- SurvivorRatio:Eden 区和 Survivor 区的大小比率。
- MetaspaceSize / MaxMetaspaceSize:元空间初始和最大大小。
- CompressedClassSpaceSize:压缩类空间大小。
- G1HeapRegionSize:G1 垃圾回收器的堆区域大小。
- Heap Usage:显示当前堆内存的使用情况,包括堆区域数量、总容量、已用空间和空闲空间等。
打印堆中对象的直方图
使用-histo
选项可以打印堆中对象的直方图,包括每种对象的实例数和总字节数:
jmap -histo <PID>
示例输出:
num #instances #bytes class name
----------------------------------------------
1: 57420 915048 java.lang.String
2: 18763 301048
显示堆的配置和使用情况
使用-heap
选项可以显示堆的配置和使用情况,包括垃圾收集器类型、堆的初始和最大大小、使用情况等:
jmap -heap <PID>
示例输出:
Attaching to process ID 12345, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 1.8.0_201
using thread-local object allocation.
Garbage-First (G1) GC with 4 thread(s)
Heap Configuration:
MinHeapFreeRatio = 40
MaxHeapFreeRatio = 70
MaxHeapSize = 1073741824 (1024.0MB)
NewSize = 1310720 (1.25MB)
MaxNewSize = 17592186044415 MB
OldSize = 5439488 (5.1875MB)
NewRatio = 2
SurvivorRatio = 8
MetaspaceSize = 21807104 (20.796875MB)
CompressedClassSpaceSize = 1073741824 (1024.0MB)
MaxMetaspaceSize = 17592186044415 MB
G1HeapRegionSize = 0 (0.0MB)
Heap Usage:
G1 Heap:
regions = 2048
capacity = 1090519040 (1038.75MB)
used = 1048576 (1.0MB)
free = 1089470464 (1037.75MB)
0.0962471971272651% used
Eden Space:
regions = 2048
capacity = 10485760 (10.0MB)
used = 5242880 (5.0MB)
free = 5242880 (5.0MB)
50.0% used
Survivor Space:
regions = 512
capacity = 5242880 (5.0MB)
used = 2621440 (2.5MB)
free = 2621440 (2.5MB)
50.0% used
Old Space:
regions = 1024
capacity = 52428800 (50.0MB)
used = 26214400 (25.0MB)
free = 26214400 (25.0MB)
50.0% used
Metaspace:
capacity = 104857600 (100.0MB)
used = 52428800 (50.0MB)
free = 52428800 (50.0MB)
50.0% used
Compressed Class Space:
capacity = 10485760 (10.0MB)
used = 5242880 (5.0MB)
free = 5242880 (5.0MB)
50.0% used
字段解释:
- Heap Configuration:显示堆内存的配置参数,如最小和最大堆空闲比率、最大堆大小、新生代大小比率等。
- Heap Usage:显示当前堆内存的使用情况,包括堆区域数量、总容量、已用空间和空闲空间等。
- Eden Space:新生代 Eden 区的使用情况。
- Survivor Space:新生代 Survivor 区的使用情况。
- Old Space:老年代的使用情况。
- Metaspace:方法区(元空间)的使用情况。
- Compressed Class Space:压缩类空间的使用情况。
显示类加载器的内存使用情况
使用-clstats
选项可以显示类加载器的内存使用统计信息:
jmap -clstats <PID>
示例输出:
class_loader classes_loaded classes_unloaded bytes_loaded bytes_unloaded
--------------------------------------------------------------------------------------
bootstrap 500 10 2048000 102400
system 200 5 1024000 51200
字段解释:
- class_loader:类加载器名称。
- classes_loaded:已加载类的数量。
- classes_unloaded:已卸载类的数量。
- bytes_loaded:已加载类占用的字节数。
- bytes_unloaded:已卸载类释放的字节数。
显示堆中对象的直方图
使用-histo
选项可以打印堆中对象的直方图,包括每种对象的实例数和总字节数:
jmap -histo <PID>
示例输出:
num #instances #bytes class name
----------------------------------------------
1: 57420 915048 java.lang.String
2: 18763 301048 java.lang.Integer
3: 9500 152000