1. 程式人生 > 其它 >效能問題分析-CPU偏高

效能問題分析-CPU偏高

問題:CPU偏高是什麼原因?怎麼分析?

CPU偏高分為:System的CPU偏高和UseCPU偏高。 1.System:核心呼叫,IO導致的,看IO是否使用頻繁,通過命令(sar或者nmon---disk busy )檢視diskbusy,若diskbusy超過30%以上就可以稱IO繁忙,通過命令(iostat)檢視磁碟中IO的排序佇列;如果不是IO繁忙,就通過命令starce,檢視核心呼叫什麼比較頻繁。iostat看具體哪塊磁碟使用繁忙,再看read或write哪個繁忙,詢問開發人員為什麼讀寫這麼高,找出原因。 讀高:大量讀取資料造成記憶體不夠引起的; 寫高:需要減少寫的頻率。 2.use:說明應用程式本身比較繁忙,top命令檢視哪個程序使用頻率高,再用top -H -p(pid)命令找到找到最高cpu使用執行緒後,轉化為16進位制(printf "%x\n" 執行緒id),再使用Jstack 程序id | grep 執行緒id(轉化為16進位制後的執行緒id)

1、use cpu高

現象:壓測過程中,使用top命令檢視系統資源佔用情況,us cpu過高,超過50%以上。

原因:UseCPU偏高說明應用程式本身比較繁忙

排查手段:

  (1)使用top命令是哪個程序消耗CPU高

  (2)再找到CPU消耗高的執行緒:top -H -p 程序號

  (3)把執行緒號轉換成16進位制:printf "%x\n" 執行緒號

  (4)再用jstack命令分析這個執行緒是在幹什麼:jstack 程序號 | grep 16進位制的執行緒號

  (5)通過JProfiler的CPU Views檢視的層層分析,可以清楚的找到造成CPU高的原因

2、system cpu高

現象:壓測過程中,使用top命令檢視系統資源佔用情況,sy cpu過高,超過50%以上。

原因:核心呼叫,IO導致的,看IO是否使用頻繁

排查手段:

  (1)首先檢視磁碟繁忙程度、磁碟的佇列(nmon、sar),檢視diskbusy,若diskbusy超過30%以上就可以稱作IO繁忙;

(2)IO繁忙的話,檢視磁碟中IO的排序佇列(iostat),看具體是read還是write繁忙,詢問開發人員為什麼讀/寫這麼高,找出原因;

讀高:大量讀取資料造成記憶體不夠引起;

寫高:需要減少寫的頻率;

  (3)如果IO不繁忙,也就是磁碟沒有問題,則使用strace檢視系統核心呼叫情況,具體核心呼叫什麼比較頻繁;