系統CPU負載過高、CPU使用率不高的問題

(1)、問題

        線上Tomcat服務器CPU的負載非常高,但是CPU使用率正常,如圖:

        圖片.png

(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查看系統讀寫情況。

        還有可能是網絡原因,系統硬件原因等

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章