一、檢視系統負荷
如果你的電腦很慢,你或許想檢視一下,它的工作量是否太大了。
在 Linux 系統中,我們一般使用 uptime 命令檢視(w 命令和 top 命令也行)。(另外,它們在蘋果公司的 Mac 電腦上也適用。)
你在終端視窗鍵入 uptime,系統會返回一行資訊。

這行資訊的後半部分,顯示”load average”,它的意思是” 系統的平均負荷”,裡面有三個數字,我們可以從中判斷系統負荷是大還是小。

為什麼會有三個數字呢?你從手冊中查到,它們的意思分別是 1 分鐘、 5 分鐘、 15 分鐘內系統的平均負荷。
如果你繼續看手冊,它還會告訴你,當 CPU 完全空閒的時候,平均負荷為 0;當 CPU 工作量飽和的時候,平均負荷為 1 。
那麼很顯然,”load average” 的值越低,比如等於 0.2 或 0.3,就說明電腦的工作量越小,系統負荷比較輕。
但是,什麼時候能看出系統負荷比較重呢?等於 1 的時候,還是等於 0.5 或等於 1.5 的時候?如果 1 分鐘、 5 分鐘、 15 分鐘三個值不一樣,怎麼辦?
二、一個類比
判斷系統負荷是否過重,必須理解 load average 的真正含義。下面,我根據”Understanding Linux CPU Load” 這篇文章,嘗試用最通俗的語言,解釋這個問題。
首先,假設最簡單的情況,你的電腦只有一個 CPU,所有的運算都必須由這個 CPU 來完成。
那麼,我們不妨把這個 CPU 想象成一座大橋,橋上只有一根車道,所有車輛都必須從這根車道上透過。(很顯然,這座橋只能單向通行。)
系統負荷為 0,意味著大橋上一輛車也沒有。

系統負荷為 0.5,意味著大橋一半的路段有車。

系統負荷為 1.0,意味著大橋的所有路段都有車,也就是說大橋已經” 滿” 了。但是必須注意的是,直到此時大橋還是能順暢通行的。

系統負荷為 1.7,意味著車輛太多了,大橋已經被佔滿了(100%),後面等著上橋的車輛為橋面車輛的 70% 。以此類推,系統負荷 2.0,意味著等待上橋的車輛與橋面的車輛一樣多;系統負荷 3.0,意味著等待上橋的車輛是橋面車輛的 2 倍。總之,當系統負荷大於 1,後面的車輛就必須等待了;系統負荷越大,過橋就必須等得越久。

CPU 的系統負荷,基本上等同於上面的類比。大橋的通行能力,就是 CPU 的最大工作量;橋樑上的車輛,就是一個個等待 CPU 處理的程式(process)。
如果 CPU 每分鐘最多處理 100 個程式,那麼系統負荷 0.2,意味著 CPU 在這 1 分鐘裡只處理 20 個程式;系統負荷 1.0,意味著 CPU 在這 1 分鐘里正好處理 100 個程式;系統負荷 1.7,意味著除了 CPU 正在處理的 100 個程式以外,還有 70 個程式正排隊等著 CPU 處理。
為了電腦順暢執行,系統負荷最好不要超過 1.0,這樣就沒有程式需要等待了,所有程式都能第一時間得到處理。很顯然,1.0 是一個關鍵值,超過這個值,系統就不在最佳狀態了,你要動手干預了。
三、系統負荷的經驗法則
1.0 是系統負荷的理想值嗎?
不一定,系統管理員往往會留一點餘地,當這個值達到 0.7,就應當引起注意了。經驗法則是這樣的:
當系統負荷持續大於 0.7,你必須開始調查了,問題出在哪裡,防止情況惡化。
當系統負荷持續大於 1.0,你必須動手尋找解決辦法,把這個值降下來。
當系統負荷達到 5.0,就表明你的系統有很嚴重的問題,長時間沒有響應,或者接近宕機了。你不應該讓系統達到這個值。
四、多處理器
上面,我們假設你的電腦只有 1 個 CPU 。如果你的電腦裝了 2 個 CPU,會發生什麼情況呢?
2 個 CPU,意味著電腦的處理能力翻了一倍,能夠同時處理的程式數量也翻了一倍。
還是用大橋來類比,兩個 CPU 就意味著大橋有兩根車道了,通車能力翻倍了。

所以,2 個 CPU 表明系統負荷可以達到 2.0,此時每個 CPU 都達到 100% 的工作量。推廣開來,n 個 CPU 的電腦,可接受的系統負荷最大為 n.0 。
五、多核處理器
晶片廠商往往在一個 CPU 內部,包含多個 CPU 核心,這被稱為多核 CPU 。
在系統負荷方面,多核 CPU 與多 CPU 效果類似,所以考慮系統負荷的時候,必須考慮這臺電腦有幾個 CPU 、每個 CPU 有幾個核心。然後,把系統負荷除以總的核心數,只要每個核心的負荷不超過 1.0,就表明電腦正常執行。
怎麼知道電腦有多少個 CPU 核心呢?
“cat /proc/cpuinfo” 命令,可以檢視 CPU 資訊。”grep -c ‘model name’ /proc/cpuinfo” 命令,直接返回 CPU 的總核心數。
如:
****** CPU Information ******
cpu 型號: 40 Intel(R) Xeon(R) CPU E5-2680 v2 @ 2.80GHz
邏輯 cpu 個數 : 40
物理 cpu 個數 : 2
每個物理 CPU 核心個數 : 10    —-當 load 不超過 20 就表示電腦執行正常
(是否支援超執行緒 大於 1 表示支援) : 2
記憶體大小:64375 M
*****************************
[root@HaoDai_App_DB01 toolsqldir]# uptime
10:02:08 up 207 days, 5:51, 1 user, load average: 6.37, 5.34, 4.93
六、最佳觀察時長
最後一個問題,”load average” 一共返回三個平均值—-1 分鐘系統負荷、 5 分鐘系統負荷,15 分鐘系統負荷,—-應該參考哪個值?
如果只有 1 分鐘的系統負荷大於 1.0,其他兩個時間段都小於 1.0,這表明只是暫時現象,問題不大。
如果 15 分鐘內,平均系統負荷大於 1.0(調整 CPU 核心數之後),表明問題持續存在,不是暫時現象。所以,你應該主要觀察”15 分鐘系統負荷”,將它作為電腦正常執行的指標