JVM進程占用CPU過高問題排查


上午收到報警,某台機器上的CPU負載過高,通過逐步的排查,解決了問題,下面記錄一下整個排查的過程。

 

首先,登錄上對應的機器,通過top命令找到占用CPU過高的進程ID,也就是PID,為29126, 然后通過ps命令和grep命令找到PID為29126對應的服務,具體命令如下:

ps -ef | grep 29126

結果如下:

找到對應的服務之后,可以直接查看服務打印的日志,沒有發現任何異常,所以只能通過jdk提供的JVM工具來排查問題。

先通過jdk自帶的工具jstack保存一下JVM進程對應的棧信息,具體的命令是:

jstack 29126 > 29126_stack.log

然后通過top命令找到占用CPU較多時間的線程,具體的命令如下:

top -p 29126 -H

找到目標線程的PID為22050,然后將PID轉換為16進制,可以使用printf命令,具體命令如下:

printf "%x\n" 22050

轉化結果為:5622

然后在之前保存的JVM進程的棧信息的文件中找到nid=0x5622的線程的棧信息,結果如下:

 

通過線程的棧信息,我們可以找到該線程在執行的代碼,然后通過排查這段代碼找出問題所在。

 


免責聲明!

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



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