越來(lái)越多人開(kāi)始接觸Linux操作系統(tǒng),從VPS到無(wú)線路由的刷機(jī)系統(tǒng)(如OpenWRT、Tomato),同時(shí)也必不可少地會(huì)在各式各樣的探針和系統(tǒng)監(jiān)測(cè)界面上看到"系統(tǒng)平均負(fù)載"或者"Load Average"這樣的字眼,但是它并不像我們習(xí)慣中Windows、Mac操作系統(tǒng)提供百分比顯示CPU、內(nèi)存占用率,而是以幾個(gè)用空格隔開(kāi)的浮點(diǎn)數(shù)來(lái)表示系統(tǒng)平均負(fù)載,那么它們到底是什么意思呢?又如何衡量系統(tǒng)負(fù)載及系統(tǒng)的穩(wěn)定性呢?
系統(tǒng)平均負(fù)載-基本解釋
在Linux shell下,有很多命令可以看到Load Average,例如:
root@Slyar.com:~# uptime
12:49:10 up 182 days, 16:54, 2 users, load average: 0.08, 0.04, 0.01
root@Slyar.com:~# w
12:49:18 up 182 days, 16:54, 2 users, load average: 0.11, 0.07, 0.01
root@Slyar.com:~# top
top - 12:50:28 up 182 days, 16:55, 2 users, load average: 0.02, 0.05, 0.00
先大致給一下這3個(gè)數(shù)字的含義:分別表示系統(tǒng)在過(guò)去1分鐘、5分鐘、15分鐘內(nèi)運(yùn)行進(jìn)程隊(duì)列中的平均進(jìn)程數(shù)量。
運(yùn)行隊(duì)列嘛,沒(méi)有等待IO,沒(méi)有WAIT,沒(méi)有KILL的進(jìn)程通通都進(jìn)這個(gè)隊(duì)列。
另外還有一個(gè)最直接的顯示系統(tǒng)平均負(fù)載的命令
root@Slyar.com:~# cat /proc/loadavg
0.10 0.06 0.01 1/72 29632
除了前3個(gè)數(shù)字表示平均進(jìn)程數(shù)量外,后面的1個(gè)分?jǐn)?shù),分母表示系統(tǒng)進(jìn)程總數(shù),分子表示正在運(yùn)行的進(jìn)程數(shù);最后一個(gè)數(shù)字表示最近運(yùn)行的進(jìn)程ID.
系統(tǒng)平均負(fù)載-進(jìn)階解釋
只是上面那一句話的解釋?zhuān)镜扔跊](méi)解釋。寫(xiě)這篇文章的緣由就是因?yàn)榭吹搅艘黄贤鈱?xiě)的關(guān)于Load Average的文章,覺(jué)得解釋的很好,所以才打算摘取一部分用自己的話翻譯一下。
@scoutapp Thanks for your article Understanding Linux CPU Load, I just translate and share it to Chinese audiences.
為了更好地理解系統(tǒng)負(fù)載,我們用交通流量來(lái)做類(lèi)比。
1、單核CPU - 單車(chē)道 - 數(shù)字在0.00-1.00之間正常
路況管理員會(huì)告知司機(jī),如果前面比較擁堵,那司機(jī)就要等待,如果前面一路暢通,那么司機(jī)就可以駕車(chē)直接開(kāi)過(guò)。
具體來(lái)說(shuō):
0.00-1.00 之間的數(shù)字表示此時(shí)路況非常良好,沒(méi)有擁堵,車(chē)輛可以毫無(wú)阻礙地通過(guò)。
1.00 表示道路還算正常,但有可能會(huì)惡化并造成擁堵。此時(shí)系統(tǒng)已經(jīng)沒(méi)有多余的資源了,管理員需要進(jìn)行優(yōu)化。
1.00-*** 表示路況不太好了,如果到達(dá)2.00表示有橋上車(chē)輛一倍數(shù)目的車(chē)輛正在等待。這種情況你必須進(jìn)行檢查了。
2、多核CPU - 多車(chē)道 - 數(shù)字/CPU核數(shù) 在0.00-1.00之間正常
多核CPU的話,滿(mǎn)負(fù)荷狀態(tài)的數(shù)字為 "1.00 * CPU核數(shù)",即雙核CPU為2.00,四核CPU為4.00。
3、安全的系統(tǒng)平均負(fù)載
作者認(rèn)為單核負(fù)載在0.7以下是安全的,超過(guò)0.7就需要進(jìn)行優(yōu)化了。
4、應(yīng)該看哪一個(gè)數(shù)字,1分鐘,5分鐘還是15分鐘?
作者認(rèn)為看5分鐘和15分鐘的比較好,即后面2個(gè)數(shù)字。
5、怎樣知道我的CPU是幾核呢?
使用以下命令可以直接獲得CPU核心數(shù)目
grep 'model name' /proc/cpuinfo | wc -l
結(jié)論
取得CPU核心數(shù)目N,觀察后面2個(gè)數(shù)字,用數(shù)字/N,如果得到的值小于0.7即可無(wú)憂。