現象一:CPU瞬間被佔滿
第一步: top -c 查看當前佔用CPU比較高的進程
top指令的參數
- d:指定更新的間隔,以秒計算。
- q:沒有任何延遲的更新。如果使用者有超級用戶,則top命令將會以最高的優先序執行。
- c:顯示進程完整的路徑與名稱。
- S:累積模式,會將己完成或消失的子行程的CPU時間累積起來。
- s:安全模式。
- i:不顯示任何閒置(Idle)或無用(Zombie)的行程。
- n:顯示更新的次數,完成後將會退出top。
第二步: top -Hp 進程號 獲取該進程下,線程的佔用的情況
這裏的pid是10進制的,我們需要獲取其16進制的
進制轉換:7390 ——>1cde
第三步:jstack 導出進程快照
#在當前路徑下導出進程快照
jstack -l 7390 > ./7390.stack
#獲取佔用線程比較高的線程的相關輸出
cat 7390.stack |grep '1cde' -C 8
現象二:內存溢出(OOM)
通常對dump文件(進程的內存鏡像)進行分析
獲取dump文件的方式:
1.添加jar啓動參數
-XX:+HeapDumpOnOutOfMemoryError(程序內存溢出自動轉存dump)
-XX:HeapDumpPath=D:\sso\dump(轉成dump文件路徑)
2.使用jmap獲取,如獲取 32652的dump
jmap -dump:format=b,file=./32652.hprof 32652
3.使用專門的工具對dump文件進行分析
現象三:系統卡頓
jstat -gcutil 7378
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0.00 2.66 77.68 91.77 91.59 82.62 949 6.188 288438 11884.693 11890.880
FGC:full gc的次數
FGCT:full gc的總時長
如果單次Full GC過長,可以通過修改提高新生代和老生代的比例、選擇合適的GC方式等減少停頓時間。