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>
