利用Java heap dump查找、分析問題


 
開發、應用中老是會遇到OutOfMemory異常,而且常常是過一段時間內存才被吃光,這里可以利用java heap dump出jvm內存鏡像,然后再對其進行分析來查找問題。
《java heap dump觸發和分析》這篇文章很好的介紹了heap dump的方法和分析的工具。
平常利用 jmap -dump:format=b,file=/path/file.hprof <pid> 這個java自帶的工具來dump heap很方便,但當內存溢出問題發生的比較快的情況下,該命令就有可能來不及或無效。
這個時候 在應用啟動時配置相關的參數 -XX:+HeapDumpOnOutOfMemoryError 就比較方便,當然可以再加上 - XX:HeapDumpPath= /path/file.hprof 來指定文件的輸出路徑。
不知道怎么用這些參數?就在你啟動應用的時候加,如:
/usr/lib/jvm/java-1.6.0/bin/java -server -Xms1536m -Xmx1536m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:PermSize=64m -XX:MaxPermSize=64m  -XX:+HeapDumpOnOutOfMemoryError  - XX:HeapDumpPath= /path/file.hprof  -Djava.ext.dirs=/xxx/lib/ ClassName
 
《java heap dump觸發和分析》里有介紹到分析工具,個人覺得利用java自帶的  $JAVA_HOME/bin/jhat -J-Xmx512m /path/file.hprof 工具看分析結果不是很友好,當然這情況緊急、身邊又沒工具的情況下也是一個好的選擇。但個別比較推薦里面介紹的 IBM HeapAnalyzer(沒用過)和 MemoryAnalyzer,關於 MemoryAnalyzer的介紹可以看下 使用 Eclipse Memory Analyzer 進行堆轉儲文件分析里的介紹。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM