線上問題定位--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%問題都可以定位到,歡迎大家留言交流。
喜歡請微信掃描下面二維碼,關注我公眾號--“扯一扯技術”,做一些實戰專案中的問題和解決方案分享。