【jmap】jmap命令详情

简介

1、jmap能够打印给定Java进程、核心文件或远程DEBUG服务器的共享对象内存映射或堆内存的详细信息。
2、如果给定的进程运行在64位虚拟机上,则必须指定 -J-d64选项,例如jmap -J-d64 -heap pid。
3、jmap可能在未来的JDK版本中删除。
可用于内存溢出,泄露等情况的内存分析


使用语法

<no option>

当不使用选项时,jmap打印共享对象映射。
对于加载到目标JVM中的每个共享对象,将打印其开始地址、映射大小和共享对象文件的完整路径。

-dump:[live,]format=b,file=

将Java堆以hprof二进制格式转储到filename文件中。

live是可选参数,如果指定,则只转储堆中的活动对象。

可以使用jhat (Java Heap Analysis Tool)工具来读取分析生产dump文件。

-heap

打印堆摘要 (可以看到新生代,老年代的内存占比等)

Attaching to process ID 327, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.171-b11
using thread-local object allocation.
Parallel GC with 8 thread(s)
Heap Configuration:
MinHeapFreeRatio = 0
MaxHeapFreeRatio = 100
MaxHeapSize = 2147483648 (2048.0MB)
NewSize = 357564416 (341.0MB)
MaxNewSize = 715653120 (682.5MB)
OldSize = 716177408 (683.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 = 499646464 (476.5MB)
used = 49856184 (47.54656219482422MB)
free = 449790280 (428.9534378051758MB)
9.978292171001934% used
From Space:
capacity = 15204352 (14.5MB)
used = 0 (0.0MB)
free = 15204352 (14.5MB)
0.0% used
To Space:
capacity = 15204352 (14.5MB)
used = 0 (0.0MB)
free = 15204352 (14.5MB)
0.0% used
PS Old Generation
capacity = 1431830528 (1365.5MB)
used = 56643848 (54.01978302001953MB)
free = 1375186680 (1311.4802169799805MB)
3.956044161114576% used

-histo[:live]
e.g. jmap -histo:live pid | head -20

打印堆的直方图。

对于每个Java类,将打印对象数量、内存大小(以字节为单位)和完全限定类名。

VM内部类名以''前缀打印,即打印出来的类名前带的是VM的内部类。

如果指定了live子选项,则只统计活动对象。

num #instances #bytes class name
----------------------------------------------
1: 121998 15572640 [C
2: 5456 4763856 [B
3: 37391 3290408 java.lang.reflect.Method
4: 102825 3290400 java.util.concurrent.ConcurrentHashMap$Node
5: 25700 3203200 [Ljava.lang.Object;
6: 120358 2888592 java.lang.String
7: 16370 1820704 java.lang.Class

jmap -dump:live,format=b,file=/xxx/xx/x/dump.log

导出堆转储文件,可用于离线分析(但如果内存太大,可能会整个线程挂起,卡住动不了了)




参考:
https://zhuanlan.zhihu.com/p/475571429

posted @   aaacarrot  阅读(1507)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示