線上問題定位--CPU100%


服務器CPU突然告警,如何定位是哪個服務進程導致CPU過載,哪個線程導致CPU過載,哪段代碼導致CPU過載?

 

步驟一、找到最耗CPU的進程

工具:top

方法:

  • 執行top -d 1 -c,每秒刷新一次,顯示進程運行信息列表

  • 鍵入P (大寫p),進程按照CPU使用率排序

圖示:

如上圖,最耗CPU的進程PID為1802

 

步驟二:找到最耗CPU的線程

工具:top

方法:

  • top -d 1 -Hp 1802,顯示一個進程的線程運行信息列表

  • 鍵入P (大寫p),線程按照CPU使用率排序

圖示:

如上圖,進程1802內,最耗CPU的線程PID為1826

 

步驟三:將線程PID轉化為16進制

工具:計算器

 

之所以要轉化為16進制,是因為堆棧里,線程id是用16進制表示的。

 

步驟四:查看堆棧,找到線程在干嘛

工具:jstack/grep

方法:jstack 1802 | grep ‘722’ -C5

  • 打印進程堆棧

  • 通過線程id,過濾得到線程堆棧

圖示:

如上圖,找到了耗CPU高的線程對應的線程名稱“http-nio-10287-exec-10”,以及看到了該線程正在執行代碼的堆棧。

 

按照這幾個步驟,大多數的CPU 100%問題都可以定位到,歡迎大家留言交流。

喜歡請微信掃描下面二維碼,關注我公眾號--“扯一扯技術”,做一些實戰項目中的問題和解決方案分享。


免責聲明!

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



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