cpu使用率_漫话性能:CPU使用率
序言
CPU 使用率是最直觀和最常用的系統性能指標,更是我們在排查性能問題時,通常會關注的第一個指標。
節拍率
為了維護 CPU 時間,Linux 通過事先定義的節拍率(內核中表示為 HZ),觸發時間中斷,并使用全局變量 Jiffies 記錄了開機以來的節拍數。
為了維護 CPU 時間,Linux 通過事先定義的節拍率(內核中表示為 HZ),觸發時間中斷,并使用全局變量 Jiffies 記錄了開機以來的節拍數。每發生一次時間中斷,Jiffies 的值就加 1。
節拍率 HZ 是內核的可配選項,可以設置為 100、250、1000 等。不同的系統可能設置不同數值,每發生一次時間中斷,Jiffies 的值就加 1。例如,我們測試機上
adb pull /proc/config.gz . gzip -C config.gz cat config | grep CONFIG_HZ # CONFIG_HZ_PERIODIC is not set # CONFIG_HZ_100 is not set # CONFIG_HZ_250 is not set CONFIG_HZ_300=y # CONFIG_HZ_1000 is not set CONFIG_HZ=300同時,正因為節拍率 HZ 是內核選項,所以用戶空間程序并不能直接訪問。
為了方便用戶空間程序,內核還提供了一個用戶空間節拍率 USER_HZ,它總是固定為 100,也就是 1/100 秒。這樣,用戶空間程序并不需要關心內核中 HZ 被設置成了多少,因為它看到的總是固定值 USER_HZ。
getconf CLK_TCK 100使用率
單位時間內 CPU 使用情況的統計,以百分比的方式展示繁忙百分比。
Linux 通過 /proc 虛擬文件系統,向用戶空間提供了系統內部狀態的信息,而 /proc/stat 提供的就是系統的 CPU 和任務統計信息。比方說,如果你只關注 CPU 的話,可以執行下面的命令:
# cat /proc/stat | grep ^cpu cpu 234216 27933 319655 17408210 4562 55507 27548 0 0 0 cpu0 49539 7960 70000 2095840 766 17747 6814 0 0 0 cpu1 46158 7493 69829 2102226 919 14273 6062 0 0 0 cpu2 34898 2226 74222 2118598 778 12061 5720 0 0 0 cpu3 33398 2343 72419 2119606 904 9585 8048 0 0 0 cpu4 21543 1631 9387 2238443 136 437 189 0 0 0 cpu5 22054 1652 10093 2237259 127 434 203 0 0 0 cpu6 22313 1711 10588 2236524 129 420 185 0 0 0 cpu7 4308 2914 3114 2259711 798 547 323 0 0 0這里的輸出結果是一個表格。其中,第一列表示的是 CPU 編號,如 cpu0、cpu1 ,而第一行沒有編號的 cpu ,表示的是所有 CPU 的累加。其他列則表示不同場景下 CPU 的累加節拍數,它的單位是 USER_HZ,也就是 10 ms(1/100 秒),所以這其實就是不同場景下的 CPU 時間。當然,這里每一列的順序并不需要背下來。有需要的時候,查詢 man proc 就可以。下面,來依次解讀一下。
- user(通常縮寫為 us),代表用戶態 CPU 時間。注意,它不包括下面的 nice 時間,但包括了 guest 時間。
- nice(通常縮寫為 ni),代表低優先級用戶態 CPU 時間,也就是進程的 nice 值被調整為 1-19 之間時的 CPU 時間。這里注意,nice 可取值范圍是 -20 到 19,數值越大,優先級反而越低。
- system(通常縮寫為 sys),代表內核態 CPU 時間。
- idle(通常縮寫為 id),代表空閑時間。注意,它不包括等待 I/O 的時間(iowait)。
- iowait(通常縮寫為 wa),代表等待 I/O 的 CPU 時間。
- irq(通常縮寫為 hi),代表處理硬中斷的 CPU 時間。
- softirq(通常縮寫為 si),代表處理軟中斷的 CPU 時間。
- steal(通常縮寫為 st),代表當系統運行在虛擬機中的時候,被其他虛擬機占用的 CPU 時間。
- guest(通常縮寫為 guest),代表通過虛擬化運行其他操作系統的時間,也就是運行虛擬機的 CPU 時間。
- guest_nice(通常縮寫為 gnice),代表以低優先級運行虛擬機的時間。
CPU 使用率,就是除了空閑時間外的其他時間占總 CPU 時間的百分比,用公式來表示就是:
根據這個公式,我們就可以從 /proc/stat 中的數據,很容易地計算出 CPU 使用率。當然,也可以用每一個場景的 CPU 時間,除以總的 CPU 時間,計算出每個場景的 CPU 使用率。
不過先不要著急計算,直接用 /proc/stat 的數據,算的是什么時間段的 CPU 使用率嗎?這是開機以來的節拍數累加值,所以直接算出來的,是開機以來的平均 CPU 使用率,一般沒啥參考價值。
事實上,為了計算 CPU 使用率,性能工具一般都會取間隔一段時間(比如 3 秒)的兩次值,作差后,再計算出這段時間內的平均 CPU 使用率,即:
我們知道了系統 CPU 使用率的計算方法,那進程的呢?跟系統的指標類似,Linux 也給每個進程提供了運行情況的統計信息,也就是 /proc/[pid]/stat。不過,這個文件包含的數據就比較豐富了,總共有 52 列的數據。
小結
CPU 使用率是最直觀和最常用的系統性能指標,更是我們在排查性能問題時,通常會關注的第一個指標。所以我們更要熟悉它的含義,尤其要弄清楚用戶(%user)、Nice(%nice)、系統(%system) 、等待 I/O(%iowait) 、中斷(%irq)以及軟中斷(%softirq)這幾種不同 CPU 的使用率。比如說:
- 用戶 CPU 和 Nice CPU 高,說明用戶態進程占用了較多的 CPU,所以應該著重排查進程的性能問題。
- 系統 CPU 高,說明內核態占用了較多的 CPU,所以應該著重排查內核線程或者系統調用的性能問題。
- I/O 等待 CPU 高,說明等待 I/O 的時間比較長,所以應該著重排查系統存儲是不是出現了 I/O 問題。
- 軟中斷和硬中斷高,說明軟中斷或硬中斷的處理程序占用了較多的 CPU,所以應該著重排查內核中的中斷服務程序。
總結
以上是生活随笔為你收集整理的cpu使用率_漫话性能:CPU使用率的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言汇编混合编程写一个乘法,求通过C语
- 下一篇: 潍坊学院的计算机类怎么样,潍坊学院教育技