1、功能
jmap 主要用於打印指定java進程的堆內存信息。可以使用jmap生成Heap Dump,查看堆內存對象示例的統計信息、查看ClassLoader的信息
2、位置
jmap 命令位於$JAVA_HOME/bin目錄下
3、jmap 的用法
參數:
- option 選項參數
- pid 需要打印配置信息的進程ID
- executable 產生核心dump的Java可執行文件
- core 需要打印配置信息的核心文件
- server-id 可選的唯一id,如果相同的遠程主機上運行了多台調試服務器,用此選項參數標識服務器
- remote server IP or hostname 遠程調試服務器的IP地址或主機名
option
- no option: 查看進程的內存映像信息,類似 pmap 命令。
- heap: 顯示java堆詳細信息
- histo[:live]: 顯示堆中對象的統計信息
- clstats: 打印類加載信息
- finalizerinfo: 顯示在F-Queue隊列等待Finalizer線程執行finalizer方法的對象
- dump:<dump-options>:生成堆轉存儲快照
- F: 當-dump沒有響應時,使用--dump或者-histo參數 在這個模式下,live子參數無效
- help 打印幫助信息
- J<flag>: 指定傳遞個運行jmap的jvm的參數
3.1 no option
命令: jmap pid
jmap pid 使用不帶選項參數的jmap打印共享對象映射,會打印目標虛擬機中加載的每個共享對象的起始地址、映射大小以及共享對象文件的路徑全稱
3.2 heap
命令: jmap -heap pid
打印一個堆的摘要信息,包括使用的GC算法、堆配置信息和各內存區域內存使用情況
3.3 histo[:live]
命令: jmap -histo:live pid
輸出每個java類的對象數量、內存大小(單位:字節)、完全限定的類名。打印的虛擬機內部的類名稱將會帶有一個‘*‘’前綴。如果指定了live子選項,則只計算活動的對象
第一列:編號id
第二列:實例個數
第三列:所有實例大小
第四列:類名
3.4 finalizerinfo
命令: jmap -finalizerinfo pid
打印等待終結的對象信息
Number of objects pending for finalization: 0 說明當前F-QUEUE隊列中並沒有等待Fializer線程執行finalizer方法的對象。
3.5 dump:<dump-options>
命令 jmap -dump:live,format=b,file=dump.hprof pid
以hprof二進制格式轉儲Java堆到指定filename的文件中。live子選項是可選的。如果指定了live子選項,堆中只有活動的對象會被轉儲
3.6 -F
強制模式。如果指定的pid沒有響應,請使用jmap -dump或jmap -histo選項。此模式下,不支持live子選項
jmap -F -dump:format=b,file=dump.hprof