1. 程式人生 > >jmap:java內存影像工具

jmap:java內存影像工具

分享 格式 圖片 alt 技術 png -perm ips 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內存影像工具