cpu使用率_漫话性能:CPU使用率
序言
CPU 使用率是最直觀和最常用的系統(tǒng)性能指標(biāo),更是我們?cè)谂挪樾阅軉?wèn)題時(shí),通常會(huì)關(guān)注的第一個(gè)指標(biāo)。
節(jié)拍率
為了維護(hù) CPU 時(shí)間,Linux 通過(guò)事先定義的節(jié)拍率(內(nèi)核中表示為 HZ),觸發(fā)時(shí)間中斷,并使用全局變量 Jiffies 記錄了開機(jī)以來(lái)的節(jié)拍數(shù)。
為了維護(hù) CPU 時(shí)間,Linux 通過(guò)事先定義的節(jié)拍率(內(nèi)核中表示為 HZ),觸發(fā)時(shí)間中斷,并使用全局變量 Jiffies 記錄了開機(jī)以來(lái)的節(jié)拍數(shù)。每發(fā)生一次時(shí)間中斷,Jiffies 的值就加 1。
節(jié)拍率 HZ 是內(nèi)核的可配選項(xiàng),可以設(shè)置為 100、250、1000 等。不同的系統(tǒng)可能設(shè)置不同數(shù)值,每發(fā)生一次時(shí)間中斷,Jiffies 的值就加 1。例如,我們測(cè)試機(jī)上
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同時(shí),正因?yàn)楣?jié)拍率 HZ 是內(nèi)核選項(xiàng),所以用戶空間程序并不能直接訪問(wèn)。
為了方便用戶空間程序,內(nèi)核還提供了一個(gè)用戶空間節(jié)拍率 USER_HZ,它總是固定為 100,也就是 1/100 秒。這樣,用戶空間程序并不需要關(guān)心內(nèi)核中 HZ 被設(shè)置成了多少,因?yàn)樗吹降目偸枪潭ㄖ?USER_HZ。
getconf CLK_TCK 100使用率
單位時(shí)間內(nèi) CPU 使用情況的統(tǒng)計(jì),以百分比的方式展示繁忙百分比。
Linux 通過(guò) /proc 虛擬文件系統(tǒng),向用戶空間提供了系統(tǒng)內(nèi)部狀態(tài)的信息,而 /proc/stat 提供的就是系統(tǒng)的 CPU 和任務(wù)統(tǒng)計(jì)信息。比方說(shuō),如果你只關(guān)注 CPU 的話,可以執(zhí)行下面的命令:
# 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這里的輸出結(jié)果是一個(gè)表格。其中,第一列表示的是 CPU 編號(hào),如 cpu0、cpu1 ,而第一行沒(méi)有編號(hào)的 cpu ,表示的是所有 CPU 的累加。其他列則表示不同場(chǎng)景下 CPU 的累加節(jié)拍數(shù),它的單位是 USER_HZ,也就是 10 ms(1/100 秒),所以這其實(shí)就是不同場(chǎng)景下的 CPU 時(shí)間。當(dāng)然,這里每一列的順序并不需要背下來(lái)。有需要的時(shí)候,查詢 man proc 就可以。下面,來(lái)依次解讀一下。
- user(通常縮寫為 us),代表用戶態(tài) CPU 時(shí)間。注意,它不包括下面的 nice 時(shí)間,但包括了 guest 時(shí)間。
- nice(通常縮寫為 ni),代表低優(yōu)先級(jí)用戶態(tài) CPU 時(shí)間,也就是進(jìn)程的 nice 值被調(diào)整為 1-19 之間時(shí)的 CPU 時(shí)間。這里注意,nice 可取值范圍是 -20 到 19,數(shù)值越大,優(yōu)先級(jí)反而越低。
- system(通常縮寫為 sys),代表內(nèi)核態(tài) CPU 時(shí)間。
- idle(通常縮寫為 id),代表空閑時(shí)間。注意,它不包括等待 I/O 的時(shí)間(iowait)。
- iowait(通常縮寫為 wa),代表等待 I/O 的 CPU 時(shí)間。
- irq(通常縮寫為 hi),代表處理硬中斷的 CPU 時(shí)間。
- softirq(通常縮寫為 si),代表處理軟中斷的 CPU 時(shí)間。
- steal(通常縮寫為 st),代表當(dāng)系統(tǒng)運(yùn)行在虛擬機(jī)中的時(shí)候,被其他虛擬機(jī)占用的 CPU 時(shí)間。
- guest(通常縮寫為 guest),代表通過(guò)虛擬化運(yùn)行其他操作系統(tǒng)的時(shí)間,也就是運(yùn)行虛擬機(jī)的 CPU 時(shí)間。
- guest_nice(通常縮寫為 gnice),代表以低優(yōu)先級(jí)運(yùn)行虛擬機(jī)的時(shí)間。
CPU 使用率,就是除了空閑時(shí)間外的其他時(shí)間占總 CPU 時(shí)間的百分比,用公式來(lái)表示就是:
根據(jù)這個(gè)公式,我們就可以從 /proc/stat 中的數(shù)據(jù),很容易地計(jì)算出 CPU 使用率。當(dāng)然,也可以用每一個(gè)場(chǎng)景的 CPU 時(shí)間,除以總的 CPU 時(shí)間,計(jì)算出每個(gè)場(chǎng)景的 CPU 使用率。
不過(guò)先不要著急計(jì)算,直接用 /proc/stat 的數(shù)據(jù),算的是什么時(shí)間段的 CPU 使用率嗎?這是開機(jī)以來(lái)的節(jié)拍數(shù)累加值,所以直接算出來(lái)的,是開機(jī)以來(lái)的平均 CPU 使用率,一般沒(méi)啥參考價(jià)值。
事實(shí)上,為了計(jì)算 CPU 使用率,性能工具一般都會(huì)取間隔一段時(shí)間(比如 3 秒)的兩次值,作差后,再計(jì)算出這段時(shí)間內(nèi)的平均 CPU 使用率,即:
我們知道了系統(tǒng) CPU 使用率的計(jì)算方法,那進(jìn)程的呢?跟系統(tǒng)的指標(biāo)類似,Linux 也給每個(gè)進(jìn)程提供了運(yùn)行情況的統(tǒng)計(jì)信息,也就是 /proc/[pid]/stat。不過(guò),這個(gè)文件包含的數(shù)據(jù)就比較豐富了,總共有 52 列的數(shù)據(jù)。
小結(jié)
CPU 使用率是最直觀和最常用的系統(tǒng)性能指標(biāo),更是我們?cè)谂挪樾阅軉?wèn)題時(shí),通常會(huì)關(guān)注的第一個(gè)指標(biāo)。所以我們更要熟悉它的含義,尤其要弄清楚用戶(%user)、Nice(%nice)、系統(tǒng)(%system) 、等待 I/O(%iowait) 、中斷(%irq)以及軟中斷(%softirq)這幾種不同 CPU 的使用率。比如說(shuō):
- 用戶 CPU 和 Nice CPU 高,說(shuō)明用戶態(tài)進(jìn)程占用了較多的 CPU,所以應(yīng)該著重排查進(jìn)程的性能問(wèn)題。
- 系統(tǒng) CPU 高,說(shuō)明內(nèi)核態(tài)占用了較多的 CPU,所以應(yīng)該著重排查內(nèi)核線程或者系統(tǒng)調(diào)用的性能問(wèn)題。
- I/O 等待 CPU 高,說(shuō)明等待 I/O 的時(shí)間比較長(zhǎng),所以應(yīng)該著重排查系統(tǒng)存儲(chǔ)是不是出現(xiàn)了 I/O 問(wèn)題。
- 軟中斷和硬中斷高,說(shuō)明軟中斷或硬中斷的處理程序占用了較多的 CPU,所以應(yīng)該著重排查內(nèi)核中的中斷服務(wù)程序。
總結(jié)
以上是生活随笔為你收集整理的cpu使用率_漫话性能:CPU使用率的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: c语言汇编混合编程写一个乘法,求通过C语
- 下一篇: 潍坊学院的计算机类怎么样,潍坊学院教育技