Linux下獲取java堆棧文件并進(jìn)行分析-簡書

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

2、jstack PID > jstack.log

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

3、分析棧文件

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

上述命令可以統(tǒng)計java.lang.Thread.State出現(xiàn)的次數(shù)

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

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

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

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

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

選擇第一個內(nèi)存分析報告,然后點Finish:

如果文件太大導(dǎo)致失敗,需要跳轉(zhuǎn)MemoryAnalyzer.ini文件中JVM參數(shù)大小

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

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


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

當(dāng)然也有線程的堆使用情況分析,可以方便地找到占用大量內(nèi)存的線程,找到真正導(dǎo)致內(nèi)存、cpu飆升的罪魁禍?zhǔn)祝?/b>

本文轉(zhuǎn)載:https://www.cnblogs.com/stm32stm32/p/10539992.html
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容