1.背景
伺服器CPU使用率告警,緊急排查。
2.排查思路
2.1 top檢視各程序的CPU佔用率
top
查到程序的pid
2.2 檢視該程序的所有執行緒
top -Hp <pid>
發現大量的GC task thread#
的cpu使用超過90%,定位到時頻繁GC導致,可能是記憶體不足引起
# jstat監控GC情況,其中:<vmid> 是Java虛擬機器的ID,通常是程序ID。 [interval]是可選的,表示取樣間隔時間,單位為毫秒。[count]是可選的,表示取樣次數。例如,要監控程序ID為1234的Java應用程式的GC情況,每隔1秒鐘輸出一次取樣資訊,總共取樣5次
jstat -gc 1234 1000 5
# 檢視垃圾回收的空間佔比
jstat -gcutil 21430 1000
# gc原因
jstat -gccause 21430 1000
2.3 調整java程序的jvm記憶體設定
# 檢視預設值:最大堆分配記憶體 -Xmx 相當於MaxHeapSize
jinfo -flag MaxHeapSize 21430
# 調整預設設定
java -jar -Xms30g -Xmx30g
3.引用
[JVM:利用jstat檢視GC資訊及堆記憶體設定(二)(https://blog.csdn.net/qq_24950043/article/details/129777267)
Java應用生產Full GC或者OOM問題如何定位
jstack問題定位分析
[垃圾回收GC (Allocation Failure) Full GC (Ergonomics)](https://blog.csdn.net/weixin_43821874/article/details/90675264
Full GC (Ergonomics) 產生的原因
JVM-JVM調優