cpu負載的真正含義到底是什麼

最近遇到了幾次load異常的問題,用top命令查看後發現load很高,但是cpu的其他指標都十分正常,於是想好好了解下爲什麼會load高。

什麼是cpu的loadCPU負載:顯示的是一段時間內正在使用和等待使用CPU的平均任務數。

看到網上有個例子來說cpu的load。

把CPU比作電話亭,把任務比作排隊打電話的人。有一堆人排隊打電話,每個人只允許打1分鐘的電話,如果時間到了還沒有打完還是需要重新去排隊。

在打電話的時候,肯定會遇到排隊等待電話的人,也有打完電話走掉的人,也有新來排隊的人,也有打完1分鐘後沒打完又重新排隊的人。那這個人數的變化

就相當於任務的增減。爲了統計平均負載狀態,那麼就開始統計每分鐘統計一次人數,並且在第1,5,15分鐘的時候對統計情況取平均值。

load低並不意味着CPU的利用率低,有的人(任務)拿起電話(CPU)一直打完1分鐘,有的人(任務)拿起電話(CPU)一直猶豫是否要打,猶豫30

秒後才撥通了電話,然後只有後30秒是真正在打電話。所以就是說前一個任務的CPU利用率高,而後一個任務的CPU利用率就低。

請求大於當前的處理能力,那就產生等待,就會引起load升高。

負載高,CPU利用率低:說明等待執行的任務很多。很可能是進程僵死了。通過命令ps –axjf查看是否存在D狀態的進程,該狀態爲不可中斷的睡眠狀

態。處於D狀態的進程通常是在等待IO,通常是IO密集型任務,如果大量請求都集中於相同的IO設備,超出設備的響應能力,會造成任務在運行隊列裏堆積

等待,也就是D狀態的進程堆積,那麼此時Load Average就會飆高。

CPU利用率高,負載低:說明任務少,但是任務執行時間長,有可能是程序本身有問題,如果沒有問題那麼計算完成後則利用率會下降。這種場景,通

常是計算密集型任務,即大量生成耗時短的計算任務。

CPU使用率低,IO繁忙,負載低:這種場景,通常是低頻大文件讀寫,由於請求數量不大,所以任務都處於R狀態(表示正在運行,或者處於運行隊列,

可以被調度運行),負載數值反映了當前運行的任務數,不會飆升,IO設備處於滿負荷工作狀態,導致系統響應能力降低。

load很高的原因

從編程語言層次上full gc次數的增大或死循環都有可能造成cpu load 增高。那麼首先就要找到哪些線程在佔用cpu,之後再通過線程的id值在堆棧文件中

查找具體的線程,看看出來什麼問題。

通過top -c命令顯示進程運行信息列表 (按鍵P按CPU佔有資源排序)。

另一種就是處於D狀態的進程。運行的時候,進程會向內核請求一些服務,內核就會將程序掛起進程,並將進程放到parked隊列,通常這些進程只會在

parked隊列中停留很短的時間。但是如果內核因爲某些原因不能提供相應服務的話。例如,進程要讀某一個特定的磁盤塊,但是磁盤控制器壞了,這時,除

非進程完成讀磁盤,否則內核無法將該進程移出parked隊列,此時該進程標誌位就會被置爲D。由於進程只有在運行的時候才能接受到signals,所以此時在

parked隊列上的進程也就無法接收到信號了。解決這個問題的方法要麼是給資源給該進程,要麼是reboot。通俗一點說,產生D狀態的原因出現

uninterruptible sleep狀態的進程一般是因爲在等待IO,例如磁盤IO、網絡IO等。因爲進程一直在運行隊列(running queue)中,所以還會導致主機的

Load上升。

參考:https://www.cnblogs.com/yunxizhujing/p/9382396.html

https://blog.csdn.net/arkblue/article/details/46862751

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章