線上Web應用故障排查之高CPU佔用

故障描述

Web服務啓動以後,服務器CPU使用率瞬間飆升到90%。此時接口服務頻繁超時。服務器

故障處理

因爲短期沒法定位和修復問題,以避免影響終端用戶操做體驗,採起了回滾操做。線程

故障問題分析

通常一個應用CPU使用率很高,一般都是因爲程序中的死循環引發的。接口

故障問題定位過程

####一、使用 top 命令查看佔用 CPU 較高的進程 top命令進程

能夠看到 PID 爲 26484 這個進程的 CPU 佔用率最高。it

####二、定位具體進程 使用 'ps aux | grep 26484' 或 'ps -ef | grep 26484' 命令,定位到具體的進程循環

ps命令

####三、查看進程下的線程 CPU 佔用狀況 使用 'ps -mp 26484 -o THREAD,tid,time | sort -rn' 命令打印出該進程下的線程佔用 CPU 狀況終端

ps命令查看線程

能夠看到 TID 爲 26762 的這個線程佔用 CPU 最高 ####四、線程 ID 轉換爲 16 進制格式 使用 'printf "%x\n" 26762' 命令將線程 ID 轉換爲 16 進制格式, 以方便下一步查詢線程堆棧信息grep

線程ID轉換

####五、查看線程堆棧信息 使用 'jstack 26484 |grep 688a -A 30' 命令打印出高 CPU 佔用的線程 26762 的堆棧信息, 以下:程序

線程堆棧

從上面的輸出結果就能夠定位到具體出問題的代碼, 最後就是仔細分析代碼,解決問題。im

相關文章
相關標籤/搜索