應用CPU使用率100%,好慌,怎麼辦?

 

你最常用什麼指標來描述系統的CPU性能呢?答案可能不是平均負載,也不是CPU上下文切換,而是另外一個更直觀的指標一CPU使率。

CPU使用率是單位時間內CPU使用情況的統計,以百分比的方式展示。那麼, 作爲最常用也是最熟悉的CPU指標,你能說出CPU使用率到底是怎麼算出來的嗎?再有,諸 如topps之類的性能工具展示的usernicesystem%iowait%steal等等,你又能弄清楚它們之間的不同嗎?

CPU的5種狀態

在linux平臺下cpu存在5種狀態使用組合。

 

CPU使用率

Linux作爲一個多任務操作系統,將每個CPU的時間劃分爲很短的時間片,再通過調度器輪流分配給各個任務使用,因此造成多任務同時運行的錯覺。

爲了維護CPU時間,Linux通過事先定義的節拍率(內核中表示爲HZ)觸發時間中斷,並使用全局變量Jiffies記錄了開機以來的節拍數。每發生一次時間中斷,Jiffies的值就加1

節拍率HZ是內核的可配選項,可以設置爲1002501000等。不同的系統可能設置不同數 值,你可以通過查詢/boot/config內核選項來查看它的配置值。比如在我的系統中,節拍率設置成了1000,也就是每秒鐘觸發1000次時間中斷。

[root@www ~]# cat /boot/config-3.10.0-693.el7.x86_64 | grep CONFIG_HZ | tail -1f
CONFIG_HZ=1000

同時,正因爲節拍率HZ是內核選項,所以用戶空間程序並不能直接訪問。爲了方便用戶空間程 序,內核還提供了一個用戶空間節拍率USER_HZ,它總是固定爲100,也就是1/100秒。這 樣,用戶空間程序並不需要關心內核中HZ被設置成了多少,因爲它看到的總是固定值 USERHZ

 Linux通過/proc虛擬文件系統,向用戶空間提供了系統內部狀態的信息,而/proc/stat提供的就是系統的CPU和任務統計信息。比方說,如果你只關注CPU的話,可執行下面的命令:

[root@www ~]# cat /proc/stat | grep cpu
cpu 280580 7407 286084 172900810 83602 0 583 0 0 0 
cpu0 144745 4181 176701 86423902 52076 0 301 0 0 0 
cpul 135834 3226 109383 86476907 31525 0 282 0 0 0

 這裏的輸出結果是一個表格。其中,第一列表示的是CPU編號,如cpu,cpu1 ,而第一行沒有編號的cpu 表示的是所有CPU的累加。其他列則表示不同場景下CPU的累加節拍數,它的單位是USER_HZ 也就是10 ms (1/100秒),所以這其實就是不同場景下的CPU時間。

 這裏每一列的順序並不需要你背下來。你只要記住,有需要的時候,查詢man proc就可以。不過,你要清楚man proc文檔裏 每一列的涵義,它們都是CPU使用率相關的重要指標,你還會在很多其他的性能工具中看到它們。下面依次解讀一下。

nice (通常縮寫爲ni),代表低優先級用戶態CPU時間,也就是進程的nice值被調整爲1- 19之間時的CPU時間。這裏注意,nice可取值範圍是-2019,數值越大,優先級反而 越低。 

user (通常縮寫爲us),代表用戶態CPU時間。注意,它不包括下面的nice時間,但包括了guest 時間。

system (通常縮寫爲sys),代表內核態CPU時間。

idle (通常縮寫爲id),代表空閒時間。注意,它不包括等待I/O的時間(iowait).

iowait (通常縮寫爲wa),代表等待I/OCPU時間。

irq (通常縮寫爲hi),代表處理硬中斷的CPU時間。

softirq (通常縮寫爲si),代表處理軟中斷的CPU時間。

steal (通常縮寫爲st),代表當系統運行在虛擬機中的時候,被其他虛擬機佔用的CPU時間。

guest (通常縮寫爲guest),代表通過虛擬化運行其他操作系統的時間,也就是運行虛擬機的CPU時間。

 . guest_nice (通常縮寫爲gnice),代表以低優先級運行虛擬機的時間。

而我們通常所說的CPU使用率,就是除了空閒時間外的其他時間佔總CPU時間的百分比,用 公式來表示就是:

 

 

未完待續。。。。。。。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章