cpu idle過低問題

工作中,如果機器cpu idle過低,會收到告警

P2
主機名: set-xr-xxxx監控項:
all(#5) cpu.idle < 30 當前值: 0

排查的步驟如下,

  1. 使用top + 大寫P,查看cpu佔用過高的進程
    這裏往往就是後臺java服務,然後要通過進程來排查具體的線程,這時有兩種方法

    方法一:

  2. top -H -p [pid] , 這時可以看到該進程下的所有線程,同樣與大寫P結合可以查看cpu佔用過高的線程
    方法二:
  3. ps -mp [pid] -o THREAD,tid,time ,此時也可以看到該進程下的所有線程,其中m代表列出該進程下的所有線程,p代表列出線程佔用cpu的時間,o代表格式化輸出
    通過以上兩種方法可以獲取到線程id,以下稱爲tid
  4. 將tid轉爲16進制,可以使用以下命令 printf "%xn" [tid],得到的16進制線程id,我們同樣稱爲tid
  5. jstack [pid] | grep tid(16進制) -A 60,從輸出中排查公司相關的代碼內容,找到問題代碼的行數,進行排查

如果是fullgc導致的,可以進一步dump jvm內存信息進行排查

  1. jmap -dump:format=b,file=dump-all.hprof [pid] #dump全量內存數據,[pid]替換爲上一步查找的進程id
  2. jmap -dump:live,format=b,file=dump.hprof [pid] #再次dump存活對象內存數據,注意live參數會觸發fullgc,所以本次dump一定要在上一步全量dump之後執行。
  3. 使用eclipse的工具mat打開,進行排查
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章