一石窑、查看系統(tǒng)負(fù)荷
如果你的電腦很慢,你或許想查看一下与斤,它的工作量是否太大了肪康。
在Linux系統(tǒng)中,我們一般使用uptime命令查看(w命令和top命令也行)撩穿。
你在終端窗口鍵入uptime磷支,系統(tǒng)會(huì)返回一行信息。
這行信息的后半部分食寡,顯示"load average"雾狈,它的意思是"系統(tǒng)的平均負(fù)荷",里面有三個(gè)數(shù)字抵皱,我們可以從中判斷系統(tǒng)負(fù)荷是大還是小善榛。
為什么會(huì)有三個(gè)數(shù)字呢?你從手冊(cè)中查到呻畸,它們的意思分別是1分鐘移盆、5分鐘、15分鐘內(nèi)系統(tǒng)的平均負(fù)荷伤为。
如果你繼續(xù)看手冊(cè)咒循,它還會(huì)告訴你,當(dāng)CPU完全空閑的時(shí)候绞愚,平均負(fù)荷為0叙甸;當(dāng)CPU工作量飽和的時(shí)候,平均負(fù)荷為1位衩。
那么很顯然裆蒸,"load average"的值越低,比如等于0.2或0.3糖驴,就說明電腦的工作量越小僚祷,系統(tǒng)負(fù)荷比較輕。
但是贮缕,什么時(shí)候能看出系統(tǒng)負(fù)荷比較重呢久妆?等于1的時(shí)候,還是等于0.5或等于1.5的時(shí)候跷睦?如果1分鐘筷弦、5分鐘、15分鐘三個(gè)值不一樣抑诸,怎么辦烂琴?
二、一個(gè)類比
判斷系統(tǒng)負(fù)荷是否過重蜕乡,必須理解load average的真正含義奸绷。
首先,假設(shè)最簡(jiǎn)單的情況层玲,你的電腦只有一個(gè)CPU号醉,所有的運(yùn)算都必須由這個(gè)CPU來完成反症。
那么,我們不妨把這個(gè)CPU想象成一座大橋畔派,橋上只有一根車道铅碍,所有車輛都必須從這根車道上通過。(很顯然线椰,這座橋只能單向通行胞谈。)
系統(tǒng)負(fù)荷為0,意味著大橋上一輛車也沒有憨愉。
系統(tǒng)負(fù)荷為0.5烦绳,意味著大橋一半的路段有車。
系統(tǒng)負(fù)荷為1.0配紫,意味著大橋的所有路段都有車径密,也就是說大橋已經(jīng)"滿"了。但是必須注意的是躺孝,直到此時(shí)大橋還是能順暢通行的睹晒。
系統(tǒng)負(fù)荷為1.7,意味著車輛太多了括细,大橋已經(jīng)被占滿了(100%)伪很,后面等著上橋的車輛為橋面車輛的70%。以此類推奋单,系統(tǒng)負(fù)荷2.0锉试,意味著等待上橋的車輛與橋面的車輛一樣多;系統(tǒng)負(fù)荷3.0览濒,意味著等待上橋的車輛是橋面車輛的2倍呆盖。總之贷笛,當(dāng)系統(tǒng)負(fù)荷大于1应又,后面的車輛就必須等待了;系統(tǒng)負(fù)荷越大乏苦,過橋就必須等得越久株扛。
CPU的系統(tǒng)負(fù)荷,基本上等同于上面的類比汇荐。大橋的通行能力洞就,就是CPU的最大工作量;橋梁上的車輛掀淘,就是一個(gè)個(gè)等待CPU處理的進(jìn)程(process)旬蟋。
如果CPU每分鐘最多處理100個(gè)進(jìn)程,那么系統(tǒng)負(fù)荷0.2革娄,意味著CPU在這1分鐘里只處理20個(gè)進(jìn)程倾贰;系統(tǒng)負(fù)荷1.0冕碟,意味著CPU在這1分鐘里正好處理100個(gè)進(jìn)程;系統(tǒng)負(fù)荷1.7匆浙,意味著除了CPU正在處理的100個(gè)進(jìn)程以外安寺,還有70個(gè)進(jìn)程正排隊(duì)等著CPU處理。
為了電腦順暢運(yùn)行吞彤,系統(tǒng)負(fù)荷最好不要超過1.0我衬,這樣就沒有進(jìn)程需要等待了叹放,所有進(jìn)程都能第一時(shí)間得到處理饰恕。很顯然,1.0是一個(gè)關(guān)鍵值井仰,超過這個(gè)值埋嵌,系統(tǒng)就不在最佳狀態(tài)了,你要?jiǎng)邮指深A(yù)了俱恶。
三雹嗦、系統(tǒng)負(fù)荷的經(jīng)驗(yàn)法則
1.0是系統(tǒng)負(fù)荷的理想值嗎?
不一定合是,系統(tǒng)管理員往往會(huì)留一點(diǎn)余地了罪,當(dāng)這個(gè)值達(dá)到0.7,就應(yīng)當(dāng)引起注意了聪全。經(jīng)驗(yàn)法則是這樣的:
當(dāng)系統(tǒng)負(fù)荷持續(xù)大于0.7泊藕,你必須開始調(diào)查了,問題出在哪里难礼,防止情況惡化娃圆。
當(dāng)系統(tǒng)負(fù)荷持續(xù)大于1.0,你必須動(dòng)手尋找解決辦法蛾茉,把這個(gè)值降下來讼呢。
當(dāng)系統(tǒng)負(fù)荷達(dá)到5.0,就表明你的系統(tǒng)有很嚴(yán)重的問題谦炬,長(zhǎng)時(shí)間沒有響應(yīng)悦屏,或者接近死機(jī)了。你不應(yīng)該讓系統(tǒng)達(dá)到這個(gè)值键思。
四窜管、多處理器
上面,我們假設(shè)你的電腦只有1個(gè)CPU稚机。如果你的電腦裝了2個(gè)CPU幕帆,會(huì)發(fā)生什么情況呢?
2個(gè)CPU赖条,意味著電腦的處理能力翻了一倍失乾,能夠同時(shí)處理的進(jìn)程數(shù)量也翻了一倍常熙。
還是用大橋來類比,兩個(gè)CPU就意味著大橋有兩根車道了碱茁,通車能力翻倍了裸卫。
所以,2個(gè)CPU表明系統(tǒng)負(fù)荷可以達(dá)到2.0纽竣,此時(shí)每個(gè)CPU都達(dá)到100%的工作量墓贿。推廣開來,n個(gè)CPU的電腦蜓氨,可接受的系統(tǒng)負(fù)荷最大為n.0聋袋。
五、多核處理器
芯片廠商往往在一個(gè)CPU內(nèi)部穴吹,包含多個(gè)CPU核心幽勒,這被稱為多核CPU。
在系統(tǒng)負(fù)荷方面港令,多核CPU與多CPU效果類似啥容,所以考慮系統(tǒng)負(fù)荷的時(shí)候,必須考慮這臺(tái)電腦有幾個(gè)CPU顷霹、每個(gè)CPU有幾個(gè)核心咪惠。然后,把系統(tǒng)負(fù)荷除以總的核心數(shù)淋淀,只要每個(gè)核心的負(fù)荷不超過1.0遥昧,就表明電腦正常運(yùn)行。
怎么知道電腦有多少個(gè)CPU核心呢绅喉?
"cat /proc/cpuinfo"命令渠鸽,可以查看CPU信息。"grep -c 'model name' /proc/cpuinfo"命令柴罐,直接返回CPU的總核心數(shù)徽缚。
六、最佳觀察時(shí)長(zhǎng)
最后一個(gè)問題革屠,"load average"一共返回三個(gè)平均值----1分鐘系統(tǒng)負(fù)荷凿试、5分鐘系統(tǒng)負(fù)荷,15分鐘系統(tǒng)負(fù)荷似芝,----應(yīng)該參考哪個(gè)值那婉?
如果只有1分鐘的系統(tǒng)負(fù)荷大于1.0,其他兩個(gè)時(shí)間段都小于1.0党瓮,這表明只是暫時(shí)現(xiàn)象详炬,問題不大。
如果15分鐘內(nèi)寞奸,平均系統(tǒng)負(fù)荷大于1.0(調(diào)整CPU核心數(shù)之后)呛谜,表明問題持續(xù)存在在跳,不是暫時(shí)現(xiàn)象。所以隐岛,你應(yīng)該主要觀察"15分鐘系統(tǒng)負(fù)荷"猫妙,將它作為電腦正常運(yùn)行的指標(biāo)。