目錄
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佔比。