1. 程式人生 > 其它 >應用cpu高排查流程

應用cpu高排查流程

現象

【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高, 具體解決方法詳見應用記憶體高排查