基於場景的JVM調優

現象一: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方式等減少停頓時間。

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