CPU飆高和內存飆高的一般處理步驟

目錄

cpu飆高處理步驟

內存飆高處理步驟

GC引起的單核飆高

常見SY飆高

IO飆高

抖動問題


cpu飆高處理步驟

1. top查找出哪個進程消耗的CPU高(top -c)

2. top -h -p查找出哪個線程消耗的cpu高(top -h -p pid)

這個命令就能顯示剛剛找到的進程的所有線程的資源消耗情況。

3. printf%x進行pid的進制轉換

找到CPU負載高的線程pid 8627, 把這個數字轉換成16進制,21B3(10進制轉16進制,用linux命令: printf %x 8627)

4. jstack記錄進程的堆棧信息

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

5. 找出消耗CPU最高的線程信息

搜索“21B3”,就是搜一下16進制顯示的線程id。搜到後,下面的堆棧就是這個線程打出來的。

內存飆高處理步驟

1. jstat命令查看FGC發生的次數和消耗的時間,次數越多,耗時越長說明存在問題;

Jstat命令可以觀察到classloader,compiler,gc相關信息。可以時時監控資源和性能 

2. 連續查看jmap -heap查看老生代的佔用情況,變化越大說明程序存在問題;

Jmap命令(jmap [ option ] pid)得到運行java程序的內存分配的詳細情況。例如實例個數,大小等 


3. 使用連續的jmap -histo:live命令導出文件,比對加載對象的差異,差異部分一般是發生問題的地方。

GC引起的單核飆高

1. 單個CPU佔用率高,首先從GC查起。

常見SY飆高

1.線程上下文切換頻繁

2. 線程太多

3. 鎖競爭激烈

IO飆高

1. 如果IO的CPU佔用很高,排查涉及到IO的程序,比如把OIO改造成NIO。

抖動問題

原因:字節碼轉爲機器碼需要佔用CPU時間片,大量的CPU在執行字節碼時,導致CPU長期處於高位;

現象:“C2 CompilerThread1”守護進程,“C2 CompilerThread0”守護進程CPU佔用率最高;

解決辦法:保證編譯線程的CPU佔比。
 

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