CPU load過高

今天線上一個tomcat進程cpu負載100%。按以下步驟查出原因。

1.執行top -c命令,找到cpu最高的進程的id

2.執行top -H -p pid,這個命令就能顯示剛剛找到的進程的所有線程的資源消耗情況。找到CPU負載高的線程tid 8627, 把這個數字轉換成16進制,21B3。

3.執行jstack -l pid,拿到進程的線程dump文件。這個命令會打出這個進程的所有線程的運行堆棧。

4.用記事本打開這個文件,搜索“21B3”,就是搜一下16進制顯示的線程id。搜到後,下面的堆棧就是這個線程打出來的。排查問題從這裏深入。

今天最後排查出來的結果是“VM THREAD”把進程的資源耗盡。那隻能說明是jvm在耗cpu。很容易想到是瘋狂的GC,按關鍵字 “overhead” 搜一下系統日誌, 發現 “GC Overhead”日誌。問題明瞭了。jvm在瘋狂的Full GC,而且有個大對象始終根節點路徑可達,無法釋放。

本文永久更新鏈接地址http://www.linuxidc.com/Linux/2015-02/112975.htm

1.根據進程號進行查詢:

# pstree -p 進程號

# top -Hp 進程號

2.根據進程名字進行查詢:

# pstree -p `ps -e | grep server | awk '{print $1}'`

# pstree -p `ps -e | grep server | awk '{print $1}'` | wc -l


1.看是不是軟中斷,如網卡傳輸數據要有中斷(irq)請求,一般只在CPU0.
2.看是不是程序原因,如一些寫的很爛的php,java等程序。這不說數據庫(她很特殊)。
3.看是不是數據庫的原因。如數據庫做大的全表動態插值運算等。
4.有沒有***,使得你的服務只對***程序響應。
5.硬件原因(主板問題,電源問題,這個在品牌上可以看到)。
6.其他原因(內核參數設置不當,代理程序設置不當)等
一個top命令可以知道上面三種原因。
4、5、6三種要有相對檢查,總之有問題一定要找到發生問題的原因才能處理。
在這裏我強調下,要眼見爲實不能猜測問題的所在原因。

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