深入理解liunx平均負載
查詢系統平均負載,可以通過top或者uptime命令檢視
$ uptime
14:12:35 up 289 days, 18:50, 2 users, load average: 0.12, 0.09, 0.07
最後的三個數字,一次是過去 1 分鐘、5 分鐘、15 分鐘的平均負載(Load Average)。
我們經常會看,但你不一定正確的理解了平均負載的真正含義。
平均負載是單位時間內CPU的使用率嗎?0.12代表CPU使用率為12%?有可能很多人是這麼理解的,這麼理解就錯了。
如果你想看官方的解析,可以通過命令 man uptime 檢視,
英文原文如下:
System load averages is the average number of processes that are either in a runnable or uninterruptable state. A process in a runnable state is either using the CPU or waiting to use the CPU. A process in uninterruptable state is waiting for some I/O access, eg waiting for disk. The averages are taken over the three time intervals. Load averages are not normalized for the number of CPUs in a system, so a load average of 1 means a single CPU system is loaded all the time while on a 4 CPU system it means it was idle 75% of the time.
下面詳細的解析下什麼是平均負載,平均負載是指系統處於可執行狀態和不可中斷狀態的平均程序數,也就是平均活躍程序數,它和CPU使用率沒有什麼必然關係的。
那什麼是可執行狀態程序和不可中斷狀態程序呢?
可執行狀態程序是指正在使用CPU或者正在你等待CPU的程序,我們在ps命令下看到的處於Running和Runnable的程序就是可執行狀態程序。
不可中斷狀態程序是指正處於核心態關鍵流程中的程序,並且這些流程是不可中斷的,比如最常見的是等待硬體裝置的I/O響應,我們在ps命令下看到的處於Uninterruptible Sleep的程序就是不可中斷狀態程序。
平均負載可以簡單的理解為單位時間內系統的活躍程序數
怎樣的平均負載時合理的?
最理想的情況是平均負載等於CPU個數。平均負載高於CPU個數,說明系統已經過載。
查詢系統CPU個數:
grep 'model name' /proc/cpuinfo | wc -l
當一段是時間內系統的平均負載高於CPU個數的70%時,就要開始注意排查系統負載高的問題了,系統負載高了,程序的響應速度就會變慢,可能影響到系統提供的服務的正常執行。
平均負載和CPU使用率的區別
很多人在現實工作中,經常把平均負載和CPU使用率混為一談,平均負載高了,說明活躍程序數多,並不一定CPU使用率高,
下面給大家做下總結:
平均負載是指系統處於可執行狀態和不可中斷狀態的平均程序數,包括正在使用CPU的程序和等待CPU和等待IO的程序。
CPU使用率是指在一段時間內使用CPU情況的統計,
當系統大部分是CPU密集型程序時,兩者基本時一致的;
當系統大部分是IO密集型程序時,平均負載高,但CPU使用率不一定高;
當系統有很多等待CPU進度排程的程序時,平均負載高,CPU使用率也會高。