一、cpu性能指標
1 cpu使用率
1.1 用戶cpu使用率:包括用戶態cpu使用率(user)和低優先級用戶態cpu使用率(nice),表示cpu在用戶態運行的時間百分比。用戶cpu使用率高,
通常說明應用程序筆記繁忙。
1.2 系統cpu使用率:表示cpu在內核態運行的時間百分比(不包括中斷),系統cpu使用率高說明內核比較繁忙。
1.3 等待I/O的cpu使用率:通常也稱為iowait,表示等待I/O的時間百分比。iowait高,通常說明系統與硬件設備的I/O交互時間比較長。
1.4 軟中斷和硬中斷的cpu使用率:分別表示內核調用軟中斷、硬中斷處理程序的四件百分比,他們的使用率高,通常說明系統發生了大量的中斷。
1.5 虛擬化環境中用到的竊取cpu使用率(steal)和客戶cpu使用率(guest),分別表示被其他虛擬機占用的cpu時間百分比,和運行客戶虛擬機的cpu時間百分比。
2 平均負載:也就是系統平均活躍進程數。理想情況,平均負載等於邏輯cpu個數,這表示每個cpu都恰好被充分使用。如果平均負載大於邏輯cpu的個數,就表示負載比較重了。
3 上下文切換:本身是保證linux正常運行的一項核心功能。但過多的上下文切換,會將原本運行的cpu時間,消耗在寄存器、內核棧以及虛擬內存數據保存和恢復上,縮短進程
真正運行的時間,成為性能瓶頸。
4 cpu緩存命中率:cpu的發展速度遠遠高於內存的發展速度,cpu的處理速度就比內存的訪問速度快得多。這樣,cpu在訪問內存的時候,免不了要等待內存的相應。為了協調這
兩者的巨大性能差距,cpu緩存(通常是多級緩存)就出現了:
cpu緩存的速度介於cpu和內存之間,緩存是熱點的內存數據。根據不斷增長的熱點數據,這些緩存按照大小不同分為L1、L2、L3等三級緩存,其中L1和L2常用在
單核中,L3則用在多核中。
從L1到L3,三級緩存的大小依次增大,相應的性能一次降低(比內存還是好很多)。而他們的命中率,衡量的是cpu緩存的復用情況,命中率越高,則表示性能越好。
便於理解做了如下熱圖:
二 性能分析工具
1 平均負載:uptime查看了系統的平均負載,mpstat和pidstat分別觀察了每個cpu和每個進程的cpu使用情況,進而找到導致平均負載升高的進程,壓測工具stress。
2 上下文切換:vmstat查看系統上下文切換次數和中斷次數,pidstat觀察進程的自願上下文切換和非自願上下文切換;最后通過pidstat觀察進程的上下文切換,找出
上下文切換次數增多的根源,壓測工具sysbench。
三 快速定位分析:
實際分析我們可以按照上訴方法進行,但較為盲目,為便於快速定位問題,一般都借助於以下命令:top、vmstat、pidstat,原理圖見下:
--top:可以得到各種cpu的使用情況、僵屍進程、平均負載等信息。
--vmstat:上下文切換次數、中斷次數、運行狀態、不可中斷狀態的進程數。
--pidstat:進程的用戶cpu使用率、系統cpu使用率、自願上下文切換、非自願上下文切換、
上面三個工具的輸出信息相互關聯。
四 perf、strace、execsnoop工具的使用:
這三個工具一般結合具體事例、具體場景使用,基本命令自行百度,后續遇到具體的場景,會將具體用法補錄在此。