java應用CPU佔用率過高排查

钱塘江畔發表於2024-05-20

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調優

相關文章