cpu飆高處理步驟
1.top查找出哪個進程消耗的CPU高(top -c)
2.top -h -p查找出哪個線程消耗的cpu高(top -h -p pid)
3.printf%x進行pid的進制轉換
4.jstack記錄進程的堆棧信息
5.找出消耗CPU最高的線程信息
內存飆高處理步驟
1.jstat命令查看FGC發生的次數和消耗的時間,次數越多,耗時越長說明存在問題;
2.連續查看jmap -heap查看老生代的佔用情況,變化越大說明程序存在問題;
1.使用連續的jmap -histo:live命令導出文件,比對加載對象的差異,差異部分一般是發生問題的地方。
GC引起的單核飆高
1.單個CPU佔用率高,首先從GC查起。
常見SY飆高
1.線程上下文切換頻繁
2.線程太多
CPU 飈高
一般是死循環或者死鎖問題導致。
-
通過 top 命令找到 CPU 消耗最高的進程,並記住進程 ID {pid}。
top -M -n 2 -d 3 >{pid}/top.txt 查看top -
再次通過 top -Hp {pid} 找到 CPU 消耗最高的線程 ID,並記住線程 ID(十進制).
3.通過 JDK 提供的 jstack 工具 dump 線程堆棧信息到指定文件中。
jstack {pid} >{pid}/jstack_1.txt 一次堆棧快照 備用
jstack {pid} >{pid}/jstack_2.txt 兩次堆棧快照 備用
由於剛剛的線程 ID 是十進制的,而堆棧信息中的線程 ID 是16進制的,因此我們需要將10進制的轉換成16進制的,並用這個線程 ID 在堆棧中查找。
使用 printf “%x\n” [十進制數字] ,可以將10進制轉換成16進制。
通過剛剛轉換的16進制數字從堆棧信息裏找到對應的線程堆棧。就可以從該堆棧中看出端倪。