【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
导出堆转储文件,可用于离线分析(但如果内存太大,可能会整个线程挂起,卡住动不了了)
分类:
java / 02-jvm
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了