java-cpu/內存使用率過高問題排查


cpu使用率問題

1. 在服務器上執行top命令確定是否是java進程導致的cpu過高

2. 定位到了進程之后 定位哪個線程導致的cpu過高 執行top -Hp pid 查看進程中線程的cpu占用率

3. 定位代碼 jstack 進程id |grep -A 200 線程pid(pid是16進制數)

如果是正常的用戶線程:

通過堆棧信息查看問題發生的類和代碼地址

如果是vm線程:

使用jstat -gcutil <pid> <period> <times> 命令對比多次gc情況 如果頻繁fullgc 則使用jmap dump:format=b,file=<filepath> <pid>命令 導出線程的內存占比情況

使用工具分析引用鏈信息,定位到類和代碼位置

 

如果內存占比不高,cpu占比也不高

1. 程序慢並且不是必現情況,壓測查看jstack堆棧信息排查阻塞點 是time wait condition等網絡問題還是 blocked問題

2. 如果某個程序處於停滯狀態,可以多次導出jstack堆棧信息 ,grep 定位出是哪個線程一直處於blocked狀態,一般線程不會阻塞20s以上,分析堆棧情況查明問題

3. 死鎖w

 

 

內存占比問題

1. 通過日志查看是元空間導致的permgen space還是堆棧異常Java heap space

2. 如果是元空間溢出一般是服務啟動時加載了過多的jar包

3. top命令查看內存占比高的進程pid

4. jmap -histo:live [pid] 查看內存占用情況


免責聲明!

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



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