Java服務CPU飆到99%問題排查


 

最近生產環境中出現了一起CPU突然飆升的事件,下面介紹一下 CPU飆升問題排查的過程和解決方法。

該方案參考自:https://www.jianshu.com/p/e96c74133be6,感謝路遙Neo的分享

 

一、查看導致CPU飆升的線程

首先需要定位到是服務里的那些線程導致CPU飆升的。具體查找方法:
1、在服務器上通過命令行輸入 top 命令可以查到服務的進程號。

(輸入top回車,然后按下大寫M按照memory排序,按下大寫P按照CPU排序)

如上,占用CPU最多的進程ID是:18507

2、查到對應的進程號,通過top -H -p $pid,可以看到具體是哪個線程占用了CPU,記下該線程的id。

 

這里查詢結果列PID 就是線程ID 如上占用CPU最多的線程ID是: 18599

 

二、查看對應線程的java堆棧信息

1. 在服務器上 使用 jstack pid  > /tmp/log.txt  命令查看線程堆棧信息

如:jstack 18507 > /tmp/log.txt

 

2. 根據線程id 查詢在日志文件中,查看堆棧信息

(由於堆棧日志 線程id是16進制的,所以需要先將10進制的線程id轉為16進制)

如 18599 的16 進制是 ox48a7,根據關鍵詞:nid=0x48a7 搜索日志

 


免責聲明!

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



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