天天看點

linux性能速查-CPU使用率

該linux系列部落格為自己速查問題而寫,比較亂,僅供參考,如有問題,請參考權威書籍或文檔,謝謝。

我們最常用的衡量CPU性能的名額就是CPU使用率,在linux系統中,使用節拍率維護CPU時間,比如如果節拍率為100,也就是每秒觸發100次時間中斷,在/proc/stat中可以看到CPU自開機以來的節拍數,如:

cpu  27191238 724 17538650 6555468157 13483194 0 372961 37615633 0 0
cpu0 3346390 39 1954616 820939905 662421 0 57314 4561521 0 0
cpu1 4765506 209 3089722 819027667 247121 0 25793 4435362 0 0
cpu2 3359440 71 2033369 809011451 11441557 0 32490 4539880 0 0
cpu3 5300105 66 3154309 815403991 500441 0 202204 5791673 0 0
cpu4 2200534 16 1539795 823364225 150664 0 15448 4429211 0 0
cpu5 3673752 223 2642467 820775853 175038 0 15088 4607002 0 0
cpu6 2401452 53 1626525 823274254 153443 0 12550 4620012 0 0
cpu7 2144055 44 1497844 823670807 152504 0 12071 4630968 0 0
           

各項具體含義有興趣可自查,不過這不是重點。可以采用這種方式計算CPU使用率:

CPU使用率=1-CPU空閑時間/CPU總時間
           

但是如果以/proc/stat中的資料代入計算意義不大,因為計算出來的是自開機以來的平均值,沒有參考意義。是以:

性能工具,大多取一段時間間隔來計算平均值,這樣能夠較為準确的衡量CPU使用率。

CPU使用率我們可以通過pidstat top等工具定位具體的程序,要定位具體的調用函數庫可采用:

perf top -g -p 程序ID //-g開啟調用鍊分析

有的時候CPU使用率在使用者态下非常高,但是檢視具體的程序卻沒有CPU使用很高的程序,可能是程序在崩潰重新開機,或者大量瞬時調用,導緻 top pistat指令沒有及時的捕捉到。那麼,此時應該如何處理

1.從就緒隊列長度,處于R狀态的程序是哪些入手,使用pstree檢視父子程序,找到調用的父程序。

2.使用perf record -g  perf report。

繼續閱讀