Linux下獲取java堆棧文件並進行分析


當服務器內存飆升或者cpu負載飆升的時候,可以使用如下步驟排查問題:

1、終端輸入top命令,鍵盤大寫的情況下按P(cpu負載率從高到低排序)或者M(內存使用率從高到低排序),可以查看導致cpu或者內存飆升的java pid。

2、jstack PID號 > jstack.log

上面的命令可以保存當前時刻的線程棧到 jstack.log 文件中(保存在當前路徑下)

3、分析棧文件

3.1 grep 'java.lang.Thread.State' jstack.log  | wc -l

上述命令可以統計java.lang.Thread.State出現的次數

3.2  grep -A 1 'java.lang.Thread.State' jstack.log  | grep -v 'java.lang.Thread.State' | sort | uniq -c |sort -n

該命令可以將線程棧文件的狀態按次數排序顯示

4、jmap -dump:format=b,file=heap.log pid

上述命令可以保存當前的堆情況到heap.log文件中。

5、將heap.log傳輸到windows系統下,復制一份,后綴改成.hprof

下載Eclipse的內存分析工具,地址:https://www.eclipse.org/mat/downloads.php

下載完成后,雙擊MemoryAnalyzer.exe,點擊Open a Heap Dump

選擇桌面上的堆文件,點擊打開:

選擇第一個內存分析報告,然后點Finish:

就會打開一個總體情況頁面:

點擊左下角的Table Of Contents,里面有多種分析供選擇:

 

 每一個選項幾乎都有直觀的餅狀圖顯示對象的占用情況:

當然也有線程的堆使用情況分析,可以方便地找到占用大量內存的線程,找到真正導致內存、cpu飆升的罪魁禍首!

 


免責聲明!

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



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