1. 程式人生 > >Linux平均負載理解

Linux平均負載理解

  當系統便慢時,我們常用的命令便是top或者uptime,輸入uptime系統會有如下顯示

三個資訊從左往右分別表示:系統當前時間與系統已執行時間,使用者數,平均負載。

平均負載這裡總共有三個引數,分別不是過去1分鐘,5分鐘,15分鐘的平均負載。

假設我們在一個單 CPU 系統上看到平均負載為1.73,0.60,7.98,那麼說明在過去 1 分鐘內,系統有 73% 的超載,而在 15 分鐘內,有 698 %的超載,從整體趨勢來看,系統的負載在降低。

平均負載和cpu使用率很容易混淆,平均負載是指單位時間內,處於可執行狀態和不可中斷狀態的程序數。

簡單來說,平均負載是指單位時間內,系統處於可執行狀態和不可中斷狀態的平均程序數,也就是平均活躍程序數,它和 CPU使用率沒有直接的關係。

所謂可執行狀態的程序,是指正在使用 CPU 或者正在等待 CPU 的程序,也就是我們常用 ps 命令看到的,處於 R 狀態(Running 或 Runnable)的程序。

不可中斷狀態的程序則是正處於核心態關鍵流程中的程序,並且這些流程是不可打斷的,比如最常見的是等待硬體裝置的 I/O 響應,也就是我們在 ps 命令中看到的 D 狀態(Uninterruptible Sleep,也稱為 Disk Sleep)的程序。

所以,它不僅包括了正在使用 CPU 的程序,還包括等待 CPU 和等待 I/O 的程序。

而 CPU 使用率,是單位時間內 CPU 繁忙情況的統計,跟平均負載並不一定完全對應。比如

CPU 密集型程序,使用大量 CPU 會導致平均負載升高,此時兩者是一致的

I/O 密集型程序,等待 I/O 也會導致平均負載升高,但CPU使用率不一定高

大量等待 CPU 的程序排程也會導致平均負載升高,此時的 CPU 使用率也會比較高。

 

我們可以通過模擬實際的場景去分析

首先需要在機器上預先安裝 stress 和 sysstat 包

yum install -y epel-release

yum install -y stress

下載安裝stress;

安裝成功

yum install sysstat

sar -V

安裝成功。

注:此種方式預設使用的系統的包,版本可能比較老,centos建議使用原始碼的方式安裝,sysstat建議使用11.5.5以上版本

升級sysstat監控工具:
下載11.5.5以上版本的軟體
wget http://pagesperso-orange.fr/sebastien.godard/sysstat-12.1.1.tar.gz
解壓
tar xf sysstat-12.1.1.tar.gz
進入目錄
cd /opt/tools/sysstat-12.1.1
設定引數
# sa_lib_dir=/usr/lib/sa\
sa_dir=/var/log/sa\
conf_dir=/etc/sysconfig \
./configure --prefix=/usr \
--disable-file-attr
&& make && make install
設定sysstat全域性變數及開機啟動
ln -s /安裝路徑/sysstat-11.5.5/sysstat /usr/local/bin/
ln -s /安裝路徑/sysstat-11.5.5/sysstat /etc/init.d/sysstat
chkconfig --add sysstat
chkconfig --list | grep sysstat
手動啟動sysstat
# /etc/rc.d/init.d/sysstat start
檢視下是否可用
sar -u 1 5
執行完以上發現不是最新版本按照以下方式:
cd /opt/tools/sysstat-12.1.1
./configure
make && make install
檢視版本
[[email protected] bin]# sar -V
sysstat version 12.1.1
(C) Sebastien Godard (sysstat <at> orange.fr)
驗證
# pidstat -u 5 1
Linux 3.10.0-693.2.2.el7.x86_64 11/26/2018 _x86_64_ (2 CPU)
02:16:28 PM UID PID %usr %system %guest %wait %CPU CPU Command

 

使用stress命令,模擬CPU使用率100%(CPU 密集型程序)

$ stress --cpu 1 --timeout 600

這次模擬 I/O 壓力,即不停地執行 sync(I/O 密集型程序)

$ stress -i 1 --timeout 600

系統中執行程序超出 CPU 執行能力時,就會出現等待 CPU的程序,使用stress模擬8個程序(大量程序的場景)

$ stress -c 8 --timeout 600

# 顯示所有 CPU 的指標,並在間隔 5 秒輸出一組資料
$ mpstat -P ALL 5 1
Linux 4.15.0 (ubuntu)     09/22/18     _x86_64_    (2 CPU)
13:41:28     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
13:41:33     all    0.21    0.00   12.07   32.67    0.00    0.21    0.00    0.00    0.00   54.84
13:41:33       0    0.43    0.00   23.87   67.53    0.00    0.43    0.00    0.00    0.00    7.74
13:41:33       1    0.00    0.00    0.81    0.20    0.00    0.00    0.00    0.00    0.00   98.99

# 間隔 5 秒後輸出一組資料,-u 表示 CPU 指標
$ pidstat -u 5 1
Linux 4.15.0 (ubuntu)     09/22/18     _x86_64_    (2 CPU)
13:42:08      UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
13:42:13        0       104    0.00    3.39    0.00    0.00    3.39     1  kworker/1:1H
13:42:13        0       109    0.00    0.40    0.00    0.00    0.40     0  kworker/0:1H
13:42:13        0      2997    2.00   35.53    0.00    3.99   37.52     1  stress
13:42:13        0      3057    0.00    0.40    0.00    0.00    0.40     0  pidstat