jmap:java內存影像工具
jmap(Memory Map for java)
jmap命令用於生成堆轉儲快照(一般稱為heapdump或dump文件)
如果不使用jmap命令,要想獲取java堆轉儲快照,還有一些比較暴力的手段:譬如使用一個jvm參數 -XX:+HeapDumpOnOutOfMemoryError,可以讓虛擬機在發生OOm異常的時候自動生成dump文件,通過-XX:HeapDumpOnCtrlBreak參數,則可以使用[Ctrl]+[Break]鍵讓虛擬機生成dump文件,又或者在Linux系統下通過Kill -3 命令發送進程退出信號“嚇唬”一下虛擬機,也能拿到dump文件。
參數的我都試過是沒有問題的Linux命令我並沒有嘗試
jmap的作用不僅僅是為了獲取dump文件,他還可以查詢finalize執行隊列,Java堆和永久代的詳細信息,如空間使用率,當前用的那種收集器等。
和jinfo命令一樣,jmap有不少功能在Windows平臺下都是受限的,除了生成dump文件的 -dump選項和用於查看每個類的實例,空間占用統計的 -histo選項
在所有操作系統都提供之外,其余的選項只能在Linux/Solaris平臺使用(這點是不是為了推廣Linux麽 0.0)
好了,下來就要學習命令了,以及執行
jmap [option] vmid
雖說命令的功能有限制,但是我們還是都列舉出來吧
-dump 生成java堆轉儲快照,格式為:-dump:[live, ]format=b, file=<filename>,其中live自參數說明只有dump出存活的對象
-finalizerinfo 顯示在F-Queue中等待Finalizer線程執行finalizer方法的對象
-heap 顯示java堆詳細信息,如使用那種回收器,參數配置,分代狀況
-histo 顯示堆中對象的統計信息,包括類,實例數量,合計容量
-permstat 以ClassLoader為統計口徑顯示永久代內存狀態
-F 當虛擬機進程對-dump選項沒有響應時,可使用這個選項強制生成dump快照
下面就是例子,圖片
我們來一個dump文件的生成
jmap -dump:format-b,file=eclipse.bin 6832
可以看到文件已經創建,創建的目錄就是pwd所在的當前目錄
那麽剩下的問題就是如何分析dump文件了!!!
jmap:java內存影像工具