(1)、問題
線上Tomcat服務器CPU的負載非常高,但是CPU使用率正常,如圖:
(2)、問題排查
1、首先查看是哪些進程的CPU佔用率最高(如下可以看到詳細的路徑)
ps -aux --sort -pcpu | more
# 定位有問題的線程可以用如下命令
ps -mp pid -o THREAD,tid,time | more
2、查看JAVA進程的每個線程的CPU佔用率
ps -Lp 5798 cu | more # 5798是查出來進程PID
3、追蹤線程,查看負載過高的原因,使用JDK下的一個工具
jstack 5798 # 5798是PID
jstack -J-d64 -m 5798 # -j-d64指定64爲系統
jstack 查出來的線程ID是16進制,可以把輸出追加到文件,導出用記事本打開,
再根據系統中的線程ID去搜索查看該ID的線程運行內容,可以和開發一起排查。
(3)、常見的處理辦法
網站相關進程導致負載高處理辦法:
1、直接把網站php或http或tomcat等網站服務重啓,很多時候負載就降下來了
2、也可能是網站代碼漏洞導致的,需要反饋開發一起查找原因和處理
3、把重複的tomcat kill全部掉重新啓動
mysql進程導致的負載高處理辦法:
1、常見的就是mysql慢查詢導致,可以在mysql慢查詢日誌找到相關sql語句,這需要對sql進行優化
2、還可以進入mysql,用show full processlist\G;查看那個mysql進程執行時間比較久的慢查詢。如果是內部後臺使用的語句,可以先kill掉,優化後再執行。
3、mysql讀寫太頻繁,如果是讀寫頻繁可以在%wa等待輸入輸出看的出來佔用cpu百分比很大。也可以通過命令iostat查看系統讀寫情況。
還有可能是網絡原因,系統硬件原因等