cpu load
cpu load通常做為一個機器負載的衡量指標
cpu load是對使用或者等待cpu進程的統(tǒng)計(數(shù)量的累加)崎岂。每一個使用(using)或者等待(waiting)CPU的進程(process),都會使load值+1渔欢。
每一個結(jié)束的(teminates)進程,都會使load值-1赎瞎。
所謂使用CPU的進程揍很,是指狀態(tài)為running
的進程,或者說是在cpu run queue里的進程辆雾。
所謂等待CPU的進程肪笋,是指狀態(tài)為runnable
的進程,或者說是在cpu ready queue里的進程度迂。
大部分Unix操作系統(tǒng)只計算running
和runnable
的進程藤乙。但是Linux系統(tǒng)除了上述兩種狀態(tài)進行,還計算uninterruptible sleep
狀態(tài)的進程(通常是在等待磁盤IO)惭墓。因此坛梁,如果有很多進程被block在IO處,Linux系統(tǒng)顯示的load會被Unix系統(tǒng)高一些诅妹。舉個例子罚勾,如果有進程由于NFS服務掛掉或者USB設備太慢而block住的話,會顯示一個奇怪的現(xiàn)象:cpu使用率不高吭狡,但是cpu load很高尖殃。
cpu load average
通常,我們關(guān)注的不是cpu load划煮,而是cpu load average這個指標送丰。
所有的Unix和類Unix操作系統(tǒng),都有3個"load average"的統(tǒng)計指標弛秋。分別表示1分鐘器躏、5分鐘和15分鐘內(nèi)的cpu負載均值。
使用uptime
命令是查看cpu負載最簡單的命令:
$ uptime
14:34:03 up 10:43, 4 users, load average: 0.06, 0.11, 0.09
當然蟹略,w
和top
命令也包含cpu load信息登失。
top命令:
w命令:
load average的意義
load average是個無量綱的,大致可認為是cpu進程隊列中進程的數(shù)量和cpu可處理能力的比值挖炬。比如cpu最多同時能處理10個進程揽浙,
- 如果隊列中進程數(shù)量為5,load average為50%,說明cpu還沒達到負載上限
- 如果隊列中進程數(shù)量為10馅巷,load average為100%膛虫,說明剛好達到負載上限
- 如果隊列中進程數(shù)量為15,load average為150%钓猬,說明超出了cpu的處理能力
單個cpu的load average為0.7以上時稍刀,需要注意是否快達到了服務能力的瓶頸。
cpu load和cpu utilization
cpu load(cpu負載)相較于cpu utilization(cpu使用率)更能反映機器的負載情況敞曹。
因為账月,假如有兩個配置相同的機器,一個機器cpu utilization是50%澳迫,另一個是70%捶障,我們可以認為70%的機器負載比50%的高。但是如果兩個機器的cpu use都是100%的話纲刀,誰的負載更高项炼,就不得而知了。而cpu load是可以反映出來的示绊。
比如兩個機器的per cpu load分別是1.5和1.8锭部,但是他們的cpu use都是100%。但是我們依舊可以知道哪臺機器負載更高面褐。
假如在一個單核機器上拌禾,load average是"1.73 0.60 7.98",那么可以大致這么解釋:
- 在過去1分鐘中展哭,系統(tǒng)負載超額73%湃窍。(1.73個runnable進程,但是有0.73個進程需要等待)
- 在過去5分鐘中匪傍,系統(tǒng)負載有40%空閑
- 在過去15分鐘中您市,系統(tǒng)負載超額698%。(7.98個runnable進程役衡,但是有6.98個需要等待)