JVM記憶體分析工具使用

weixin_33806914發表於2015-03-11

Java 記憶體堆疊分析。我們在分析現網問題時候,經常會遇到一些問題從日誌上無法分析的疑難問題。在我們舉足無措的時候,我們可以分析一些JVM記憶體,來看看問題出在哪裡了。
我們經常用到的一工具:
分析棧記憶體(stack):jstack/kill -3 + IBM Thread and Monitor Dump Analyzer for Java (點選下載)
分析堆記憶體(heap): jmap + jhat。

我們通常是從棧資訊入手來進行分析。下面我詳細介紹一下他們具體是使用方法:
jstack是java自帶的一個分析工具,我們可以在java的安裝目錄找到:$JAVA_HOME/bin 中找到。

使用方法usage裡面的介紹非常明確了,我就不去翻譯啦。我這裡舉個例子:

  1. 我們先查詢一下java程式,因為jstack要根據java程式號來列印stack資訊:
    ps -ef|grep java

  2. 將stack資訊記錄到stack.out檔案中: jstack -l 31155 > stack.out

  3. 我們再用BM Thread and Monitor Dump Analyzer for Java這個工具來分析。
    這裡可以清晰的看到執行緒數狀態統計,和每個執行緒的狀態。

clipboard.png

具體的分析我們可以看看這篇文章。http://jameswxx.iteye.com/blog/1041173

jmap + jhat。這個兩個命令也是java自帶的,在$JAVA_HOME/bin中你也可以找到他們兩個。
基本使用方法是:

  1. 先列印heap資訊:jmap -dump:live,format=b,file=heap.bin
    注意這個檔案一般會很大。要看應用服務。

  2. 使用jhat分析:jhat -J-mx1024M heap.bin
    這個命令會啟動一個Server服務,預設的埠是7000。其中-mx是設定最大使用多少記憶體,如果你要分析的heap檔案很大的話,這個值要配置很大,不然會包記憶體異常的錯誤。

clipboard.png
我們主要看這個兩個部分:
Show instance counts for all classes (excluding platform)
Show heap histogram
平臺外的物件資訊,和物件heap樹狀圖,這個樹狀圖包括所有物件的個數已經佔有大小,佔用的大小是bytes。

相關文章