應用cpu高排查流程
阿新 • • 發佈:2022-03-13
現象
【Firing】- 應用異常告警
1. 容器CPU使用率超過50%
應用名稱: 許可權中心
產品: 業務中臺-bPaaS/許可權中心
使用者: [email protected]
ID[環境]:online-iuap-apcom-auth[online]
報警資訊: 應用[online-iuap-apcom-auth-7b74d9d7f6-dkx22]CPU使用率偏高(當前93.59%)
開始時間: 2021-06-26 02:06:29
分析步驟
1、如果映象中有arthas則使用arthas。
2、如果沒有arthas,服務能正常訪問外網則下載arthas。下載地址如下
wget https://alibaba.github.io/arthas/arthas-boot.jar
3、下載完成後按照arthas的使用辦法。
4、如果容器中沒有,網路和外網是隔離的則按照標準的jvm命令進行分析。
通過Arthas分析CPU場景
-
啟動arthas
java -jar /user/local/bin/arthas-boot.jar
-
檢視佔用cpu高的四個執行緒
thread -n 4
顯示的前4個執行緒,如果執行緒name中有GC字樣則按照記憶體排查。如果有arthas開頭則不用關心,一定要找到業務執行緒並且是runnable的執行緒,找到以後分析堆疊中找到com.yonyou.xxx 相關的類進行分析。有時候需要多嘗試執行幾次命令
定位到具體的類,可以jad反編譯檢視原始碼定位問題。
-
查詢完成後退出arthas
stop 或者 quit
標準JVM命令分析
-
使用jps命令找到佔用CPU高的程序編號
jps -mv
-
找到佔用cpu最高的執行緒
top -Hp pid
-
通過 printf “%xn” tid 將需要的執行緒 ID 轉換為 16 進位制格式。
-
通過 jstack 命令列印執行緒的堆疊資訊
jstack pid |grep 0xtid -A 30
找到執行緒之後,如果執行緒中有gc字樣則說明是記憶體問題,操作如下:
-
檢視grafana監控進入到容器詳情監控。
-
如過cpu使用率高, 首先排查是不是頻繁的fullgc導致的cpu高
jstat -gcutil pid 1000 20
-
如果是java old區滿了, 導致的CPU高, 具體解決方法詳見應用記憶體高排查