官术网_书友最值得收藏!

1.4.4 Linux下CPU使用率與機器負載的關系與區別

筆者的線上競標業務機器,在業務最繁忙的一段周期內,發現Nginx單機并發活動的連接數超過了2.6萬,機器負載(基本上不到4,Nagios監控系統并沒有發送報警郵件和短信)和Nginx+Lua服務都是正常的,網卡流量并沒有打滿,但流量就是怎么也打不進去。經過深入觀察,發現這段時期內每臺機器的CPU利用率都已經很高了,基本都維持在99%~100%左右,這種情況應該是CPU資源耗盡了,導致不能再繼續提供服務,所以這里有必要研究下CPU負載和CPU利用率這兩個概念的關系與區別。

CPU負載和CPU利用率雖然是兩個不同的概念,但它們的信息可以顯示在同一個top命令中。CPU利用率顯示的是程序在運行期間實時占用的CPU百分比,而CPU負載顯示的則是一段時間內正在使用和等待使用CPU的平均任務數。CPU利用率高,并不意味著負載就一定大。

網上有篇文章提供了一個有趣的比喻,即通過打電話來說明兩者的區別,下面筆者按照自己的理解來闡述一下。

某公用電話亭,有一個人在打電話,四個人在等待,每人限定使用電話一分鐘,若有人一分鐘之內沒有打完電話,則只能掛掉電話去排隊,等待下一輪。電話在這里就相當于CPU,而正在或等待打電話的人就相當于任務數。

在電話亭的使用過程中,肯定會有人打完電話走掉,有人沒有打完電話而選擇重新排隊,更會有新增的人在這兒排隊,這個人數的變化就相當于任務數的增減。為了統計平均負載情況,我們5秒鐘統計一次人數,并在第1、5、15分鐘的時候對統計情況取平均值,從而形成第1、5、15分鐘的平均負載。有的人拿起電話就打,一直打完一分鐘;而有的人可能前三十秒在找電話號碼,或者在猶豫要不要打,后三十秒才真正在打電話。如果把電話看作CPU,人數看作任務,就可以說前一個人(任務)的CPU利用率高,后一個人(任務)的CPU利用率低。

當然,CPU并不會在前三十秒工作,后三十秒歇著,只是說,有的程序涉及大量的計算,所以CPU利用率就高,而有的程序涉及計算的部分很少,CPU利用率自然就低。但無論CPU的利用率是高還是低,都跟后面有多少任務在排隊沒有必然關系。

CPU負載為多少才算是比較理想的呢?對于這個問題,業界一直存在爭議,各有各的說法,個人比較贊同CPU負載小于等于0.5算是一種理想的狀態。

不管某個CPU的性能有多好,1秒鐘能處理多少個任務,我們都可以認為它無關緊要,雖然事實并非如此。在評估CPU負載時,我們只以5秒鐘為單位來統計任務隊列長度。如果每隔5秒鐘統計的時候,發現任務隊列的長度都是1,那么CPU負載就為1。假如只有一個單核的CPU,負載一直為1,那就意味著沒有任務在排隊,這說明目前機器系統負載還不錯。還是以上面提到的競標業務機器為例,都是四核機器,每個內核的負載為1的話,則總負載為4。也就是說,如果那些競標服務器的CPU負載長期保持在4左右,還是可以接受的。

CPU使用率達到多少才算比較理想?

建議統計%user+%system的值(后面的章節有相關的Shell腳本),如果長期大于85%的話,就可以認為系統的CPU負載過重,這個時候就可以考慮添加物理CPU或增添業務集群機器了。

主站蜘蛛池模板: 太原市| 波密县| 西盟| 抚顺市| 佛冈县| 墨玉县| 闻喜县| 平潭县| 开化县| 仙游县| 涞水县| 馆陶县| 安图县| 阿鲁科尔沁旗| 新巴尔虎左旗| 江永县| 澄城县| 江达县| 双牌县| 洛南县| 芦山县| 兴化市| 县级市| 西林县| 涟水县| 保山市| 宜丰县| 丰宁| 平顶山市| 云梦县| 尼木县| 汶上县| 堆龙德庆县| 巴彦淖尔市| 桃园市| 方城县| 广南县| 英超| 应城市| 蓬安县| 越西县|