【底層原理】Linux中load average意義

在Linux系統中,執行top命令或者uptime命令會出現一項load average的統計值,要理解load average統計值的含義,首先須要理解進程的幾種狀態。服務器

進程狀態

學過操做系統的同窗都應該知道一個進程它是有生命週期的,而在這個生命週期中,進程可能處於不一樣的狀態中。ide

下面這張圖刻畫了進程生命週期中不一樣狀態以及各狀態之間相互轉畫的條件。
【底層原理】Linux中load average意義佈局

TASK_RUNNING:進程處於運行(已得到cpu)或者準備運行(萬事俱備,只欠東風,其它條件都得到只是沒有分配cpu);性能

TASK_INTERRUPTIBLE:可中斷睡眠狀態,可被中斷或者信號喚醒;學習

TASK_UNINTERRUPTIBLE:不可中斷睡眠狀態,不可被中斷或者信號喚醒;操作系統

TASK_STOPPED:進程暫停,進程收到SIGSTOP、SIGTSTP等信號會進入此狀態;
ASK_TRACED:進程執行被調試器中止;
EXIT_ZOMBIE:進程處於殭屍狀態,進程已經中止可是其父進程沒有調用wait或waitpid回收其狀態的進程會處於此狀態;
EXIT_DEAD:進程的最終狀態,進程已經中止其父進程也調用wait或waitpid回收其狀態的進程。調試

認識load average

有了上面的認識,如今來理解load average就會容易多了,在Linux執行top(或者uptime)命令就會出現這項性能指標。
【底層原理】Linux中load average意義
上圖中load average後面三個數分別表明不一樣時間段的系統平均負載(一分鐘、五 分鐘、以及十五分鐘),如上所示,dev這臺機器1/5/15分鐘的平均負載分別是0.48/0.57/0.78.對象

在Linux下,系統平均負載指的是運行隊列平均長度,也就是等待cpu的平均進程數。影響load average大小的直接因素是系統中活動的進程數目,也就是處於TASK_RUNNING和TASK_UNINTERRUPTIBLE狀態的進程。這一點從Linux源碼中能夠反映出來:
【底層原理】Linux中load average意義
在利用load average進行系統性能評估的時候,是如何進行評估判斷的,下面是一個能夠供參考的準則(假設機器是單核),具體根據本身項目業務看狀況而定。
Load < 0.7:系統很閒,能夠考慮多部署一些服務;這個在本身項目中設置的閾值是0.6;
0.7 < Load < 1:系統狀態不錯;
Load == 1:系統立刻要處理不過來了,趕忙找一下緣由;
Load > 5:系統已經很是繁忙了;這個在本身項目中設置的閾值是4;blog

推薦閱讀:

人人均可以作深度學習應用:入門篇(下)
深刻理解系統中log機制(下)
【C++札記】瞭解 typename 的雙重意義
【C++札記】C++對象模型以內存佈局(2)
【C++札記】C++對象模型以內存佈局(1)生命週期

專一服務器後臺技術棧知識總結分享

歡迎關注交流共同進步

【底層原理】Linux中load average意義

碼農有道 coding

碼農有道,爲您提供通俗易懂的技術文章,讓技術變的更簡單!