jmap
JVM Memory Map命令用於生成heap dump文件,如果不使用這個命令,還可以使用-XX:+HeapDumpOnOutOfMemoryError參數來讓虛擬機出現OOM的時候自動生成dump文件。 jmap不僅能生成dump文件,還可以查詢finalize執行隊列、Java堆和永久代的詳細信息,如當前使用率、當前使用的是哪種收集器等。

參數
option:選項參數,不可同時使用多個選項參數
pid:java進程id,命令ps -ef | grep java獲取
executable:產生核心dump的java可執行文件
core:需要打印配置信息的核心文件
remote-hostname-or-ip:遠程調試的主機名或ip
server-id:可選的唯一id,如果相同的遠程主機上運行了多台調試服務器,用此選項參數標識服務器
options參數
heap : 顯示Java堆詳細信息
histo : 顯示堆中對象的統計信息
permstat :Java堆內存的永久保存區域的類加載器的統計信息
finalizerinfo : 顯示在F-Queue隊列等待Finalizer線程執行finalizer方法的對象
dump : 生成堆轉儲快照
F : 當-dump沒有響應時,強制生成dump快照
dump : 生成堆轉儲快照
F : 當-dump沒有響應時,強制生成dump快照
示例
-dump
dump堆到文件,format指定輸出格式,live指明是活着的對象,file指定文件名
-heap
打印heap的概要信息,GC使用的算法,heap的配置及使用情況,可以用此來判斷內存目前的使用情況以及垃圾回收情況.
-finalizerinfo
打印等待回收的對象信息
-histo
打印堆的對象統計,包括對象數、內存大小等等。jmap -histo:live 這個命令執行,JVM會先觸發gc,然后再統計信息
jmap -histo:live 11808 | grep StringBuffer 查詢類名包含StringBuffer的信息
jmap -histo:live 11808 | grep StringBuffer > histo.txt 保存信息到histo.txt文件