理解Linux系統(tǒng)的平均負(fù)載

1. 平均負(fù)載的查看


在Linux系統(tǒng)中,如果我們想查看系統(tǒng)的負(fù)載,可以通過top指令或者uptime指令。以uptime指令為例,可以看到以下輸出:

[root@hadoop05 ~]# uptime
 22:13:29 up 4 min,  3 users,  load average: 1.17, 1.36, 0.63

uptime指令輸出數(shù)據(jù)的各項(xiàng)含義如下

22:13:29                        系統(tǒng)的當(dāng)前時(shí)間
up 4 min                        系統(tǒng)運(yùn)行的時(shí)間
3 users                         登錄的用戶數(shù)
load average: 1.17, 1.36, 0.63  系統(tǒng)在過去的1分鐘、5分鐘、15分鐘內(nèi)的平均負(fù)載

2. 平均負(fù)載的正確含義


關(guān)于平均負(fù)載,有個(gè)不太準(zhǔn)確理解:平均負(fù)載代表單位時(shí)間內(nèi)的cpu使用率。

平均負(fù)載的正確含義指的是:單位時(shí)間內(nèi),系統(tǒng)處于可運(yùn)行狀態(tài)(正在使用CPU或者正在等待CPU的進(jìn)程,stat=R)和不可中斷狀態(tài)(可能在等待IO, stat=D)的平均進(jìn)程數(shù),和CPU使用率沒有直接關(guān)系。

2.1 進(jìn)程的狀態(tài)

我們可以通過ps -aux指令來查看系統(tǒng)的狀態(tài)

[root@hadoop05 ~]# ps -aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.2  0.3 128448  6080 ?        Ss   22:09   0:05 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
root         2  0.0  0.0      0     0 ?        S    22:09   0:00 [kthreadd]
root         3  0.5  0.0      0     0 ?        S    22:09   0:11 [ksoftirqd/0]
root         5  0.0  0.0      0     0 ?        S<   22:09   0:00 [kworker/0:0H]
root         6  0.0  0.0      0     0 ?        S    22:09   0:01 [kworker/u128:0]
root         7  0.0  0.0      0     0 ?        S    22:09   0:00 [migration/0]
root         8  0.0  0.0      0     0 ?        S    22:09   0:00 [rcu_bh]
root         9  0.0  0.0      0     0 ?        R    22:09   0:02 [rcu_sched]
root        10  0.0  0.0      0     0 ?        S    22:09   0:00 [watchdog/0]
root        12  0.0  0.0      0     0 ?        S    22:09   0:00 [kdevtmpfs]
root        13  0.0  0.0      0     0 ?        S<   22:09   0:00 [netns]
root        14  0.0  0.0      0     0 ?        S    22:09   0:00 [khungtaskd]
root        15  0.0  0.0      0     0 ?        S<   22:09   0:00 [writeback]
root        16  0.0  0.0      0     0 ?        S<   22:09   0:00 [kintegrityd]
root        17  0.0  0.0      0     0 ?        S<   22:09   0:00 [bioset]
root        18  0.0  0.0      0     0 ?        S<   22:09   0:00 [kblockd]
root        19  0.0  0.0      0     0 ?        S<   22:09   0:00 [md]
root        25  0.0  0.0      0     0 ?        S    22:09   0:00 [kswapd0]
root        26  0.0  0.0      0     0 ?        SN   22:09   0:00 [ksmd]

其中STAT就表示進(jìn)程的狀態(tài),其狀態(tài)有以下幾種:

D    不可中斷睡眠 (通常是在IO操作) 收到信號(hào)不喚醒和不可運(yùn)行, 進(jìn)程必須等待直到有中斷發(fā)生,一般比較短,在ps指令中不易看到
R   正在運(yùn)行或可運(yùn)行(在運(yùn)行隊(duì)列排隊(duì)中)
S   可中斷睡眠 (休眠中, 受阻, 在等待某個(gè)條件的形成或接受到信號(hào))
T   已停止的 進(jìn)程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信號(hào)后停止運(yùn)行
W   正在換頁(yè)(2.6.內(nèi)核之前有效)
X   死進(jìn)程 (未開啟)
Z   僵尸進(jìn)程  進(jìn)程已終止, 但進(jìn)程描述符存在, 直到父進(jìn)程調(diào)用wait4()系統(tǒng)調(diào)用后釋放BSD風(fēng)格的
<   高優(yōu)先級(jí)(not nice to other users)
N   低優(yōu)先級(jí)(nice to other users)
L   頁(yè)面鎖定在內(nèi)存(實(shí)時(shí)和定制的IO)
s   一個(gè)信息頭
l   多線程(使用 CLONE_THREAD,像NPTL的pthreads的那樣)
+   在前臺(tái)進(jìn)程組

2.2. 平均負(fù)載數(shù)字的含義

load average: 1.17, 1.36, 0.63 拿其中1分鐘負(fù)載1.17來說,它表示1分鐘內(nèi)活躍的進(jìn)程數(shù)是1.17,單純看這個(gè)數(shù)字我們無法判斷究竟是負(fù)載高了還是低了。

評(píng)判之前我們需要先知道系統(tǒng)有幾個(gè)cpu,可以通過top指令查看%Cpu出現(xiàn)幾行,出現(xiàn)幾行表示有幾個(gè)cpu,或者直接查看/proc/cpuinfo文件。

2.3. 平均負(fù)載的預(yù)測(cè)

以下內(nèi)容摘錄于“架構(gòu)師之路”公眾號(hào)。系統(tǒng)單核為單核cpu

1)1分鐘Load>5,5分鐘Load<1,15分鐘Load<1:短期內(nèi)繁忙,中長(zhǎng)期空閑,初步判斷是一個(gè)“抖動(dòng)”或者是“擁塞前兆”
2)1分鐘Load>5,5分鐘Load>1,15分鐘Load<1:短期內(nèi)繁忙,中期內(nèi)緊張,很可能是一個(gè)“擁塞的開始”
3)1分鐘Load>5,5分鐘Load>5,15分鐘Load>5:短中長(zhǎng)期都繁忙,系統(tǒng)“正在擁塞”
4)1分鐘Load<1,5分鐘Load>1,15分鐘Load>5:短期內(nèi)空閑,中長(zhǎng)期繁忙,不用緊張,系統(tǒng)“擁塞正在好轉(zhuǎn)”

2.4. 平均負(fù)載多少合理

一般來說,當(dāng)平均負(fù)載高于cpu數(shù)量70%的時(shí)候,負(fù)載就有點(diǎn)高了,應(yīng)該要排查下原因。

推薦的方法,還是通過監(jiān)控系統(tǒng)把平均負(fù)載給監(jiān)控起來,然后根據(jù)大量的歷史數(shù)據(jù)來衡量平均負(fù)載為多少是合理的。

3. 平均負(fù)載與CPU使用率的關(guān)系


我們知道平均負(fù)載指定的是單位時(shí)間內(nèi)活躍的進(jìn)程數(shù),不僅包括正在使用CPU的進(jìn)程,還包括等待CPU和等待IO的進(jìn)程。

顯然平均負(fù)載和CPU使用率沒有必然的關(guān)系,它們之間的關(guān)系如下所示:

  • CPU密集型進(jìn)程,使用大量CPU會(huì)導(dǎo)致平均負(fù)載升高,此時(shí)這兩者是一致的;
  • I/O密集型進(jìn)程,等待I/O也會(huì)導(dǎo)致平均負(fù)載升高,但是CPU使用率卻不一定高;
  • 大量等待CPU的進(jìn)程調(diào)度也會(huì)導(dǎo)致平均負(fù)載升高,此時(shí)的CPU使用率也會(huì)比較高。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 【幣圈少年】拓?fù)滏湣逗Y\三國(guó)》游戲體驗(yàn) 本文由幣車HIT(biche.yaofache.com)大V養(yǎng)成計(jì)劃支持 ...
    幣圈少年閱讀 288評(píng)論 0 1
  • 親愛的、那不是愛 6組|小潔 演員朱雨辰一直不溫不火,今年卻因?yàn)楹蛬寢屔狭艘粰n節(jié)目火了。原因是大家對(duì)朱雨辰媽媽無微...
    小潔_7c00閱讀 225評(píng)論 0 0
  • 別掉進(jìn)愛的幻想里,愛不是你所想像的那樣 ” 愛恨情仇是永恒的話題,對(duì)女人來說,愛是生命中最重要的追求,是內(nèi)心的渴望...
    龍秀美閱讀 578評(píng)論 0 2
  • 張X,男,40歲。 這是我時(shí)隔半年后第二次接診他,當(dāng)然這半年他也沒有去看過別人的門診。他認(rèn)為他好了。 好了是個(gè)什么...
    小壹Odelia閱讀 310評(píng)論 0 0