Jvm dump介紹與使用(內存與線程)


 

很多情況下,都會出現dump這個字眼,java虛擬機jvm中也不例外,其中主要包括內存dump、線程dump。

 

當發現應用內存溢出或長時間使用內存很高的情況下,通過內存dump進行分析可找到原因。

當發現cpu使用率很高時,通過線程dump定位具體哪個線程在做哪個工作占用了過多的資源。

 

首先,內存dump是指通過jmap -dump <pid>輸出的文件,而線程dump是指通過jstack <pid>輸出的信息。

兩個dump可以單獨使用,也可以在特定場合下結合使用。

 

在linux操作系統下(已安裝jdk),執行jps命令,列出正在運行的java程序的進程ID。

 

使用top查看目前正在運行的進程使用系統資源情況。

 

其中進程號為24660的進程,jps輸出列表和top列表中都出現,並且在top列表中顯示是由java COMMAND啟動的。

其中%MEM為2.9,說明占用系統內存為2.9%,當前系統大概8G內存;另外%CPU指的是當前進程使用CPU資源百分比;

 

【內存dump】

jmap –dump:live,format=b,file=heap.bin <pid>

參考資料:http://docs.oracle.com/javase/6/docs/technotes/tools/share/jmap.html

 

將生成的heap.bin文件,使用ha456.jar工具打開分析。java -jar -Xmx3000m ha456.jar

 

【線程dump】

jstack -m <pid> >jvm_deadlocks.txt

jstack -l <pid> >jvm_listlocks.txt

參考資料http://docs.oracle.com/javase/6/docs/technotes/tools/share/jstack.html

使用top -H -p <pid>找出某進程中要分析的線程ID,然后將線程ID轉換為16進制后,在線程dump文件中搜索相關信息


免責聲明!

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



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