linux系統的負載詳解



系統的平均負載

如何理解平均負載


​ 單位時間內,系統處於可運行狀態和不可中斷狀態的平均進程數,也就是平均活躍進程數。

平均負載多少合理


核心數 平均負載 含義
4 2 有50%的cpu是空閑狀態,見圖一
2 2 CPU剛好被完全占用,見圖二
1 2 至少有一半的進程搶不到cpu資源,見圖三

就像是有四條馬路, 有兩輛小車在上面跑,這個時候交通很暢通,不會堵車。

現在有兩條馬路,上面有兩輛汽車,這個時候剛好合適。

現在有兩條馬路,四量汽車,馬路已經跑滿了,后面的就堵住了。

該關注哪個值

1、如果1min,5min,15min的數值相差不大,表示系統的負載很“穩定”

2、如果近1min的值小於近15min的值證明系統負載的,平均負載在逐漸降低,但是在前15min的負載過高原因需要知道。

3、如果近15min的值,遠小於近1min的值,說明負載在升高,有可能是臨時的也有可能會不停的升高。


平均負載案例分析


對CPU的測試


stress
[root@fpm_nginx ~]# yum -y install stress

# 模擬4個cpu核心全部占滿的情況 
終端1
[root@fpm_nginx ~]# stress --cpu 4 --timeout 600
終端2
[root@fpm_nginx ~]# watch -d uptime
10:16:06 up 3 min,  2 users,  load average: 3.90, 1.68, 0.64


mpstat # 查看cpu的實時使用情況
[root@fpm_nginx ~]# yum install -y sysstat

[root@fpm_nginx ~]# mpstat -P ALL 5
# 每5s檢查一次所有cpu,查看是用戶還是系統導致的負載過高。
Linux 3.10.0-957.el7.x86_64 (fpm_nginx) 	04/22/2020 	_x86_64_	(4 CPU)

10:22:48 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
10:22:53 AM  all    0.00    0.00    0.05    0.00    0.00    0.00    0.00    0.00    0.00   99.95
10:22:53 AM    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
10:22:53 AM    1    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
10:22:53 AM    2    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
10:22:53 AM    3    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00

pidstat
[root@fpm_nginx ~]# pidstat -u 5 1
# 每5s輸出一組數據,最后一組數據是平均值,查看是哪個程序導致的負載過高
Linux 3.10.0-957.el7.x86_64 (fpm_nginx) 	04/22/2020 	_x86_64_	(4 CPU)

10:28:25 AM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
10:28:30 AM     0      5819    0.20    0.00    0.00    0.20     2  vmtoolsd
10:28:30 AM     0      6650  100.00    0.20    0.00  100.00     3  stress
10:28:30 AM     0      6651  100.00    0.20    0.00  100.00     2  stress
10:28:30 AM     0      6652   99.60    0.20    0.00   99.80     0  stress
10:28:30 AM     0      6653  100.00    0.00    0.00  100.00     1  stress
10:28:30 AM     0      6656    0.00    0.40    0.00    0.40     0  pidstat

Average:      UID       PID    %usr %system  %guest    %CPU   CPU  Command
Average:        0      5819    0.20    0.00    0.00    0.20     -  vmtoolsd
Average:        0      6650  100.00    0.20    0.00  100.00     -  stress
Average:        0      6651  100.00    0.20    0.00  100.00     -  stress
Average:        0      6652   99.60    0.20    0.00   99.80     -  stress
Average:        0      6653  100.00    0.00    0.00  100.00     -  stress
Average:        0      6656    0.00    0.40    0.00    0.40 


對I/O的測試


600s之后退出
stress --io 1 --timeout 600

[root@fpm_nginx ~]# mpstat -P ALL 5
Linux 3.10.0-957.el7.x86_64 (fpm_nginx) 	04/22/2020 	_x86_64_	(4 CPU)

10:42:05 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
10:42:10 AM  all    0.10    0.00   13.27    0.00    0.00    0.05    0.00    0.00    0.00   86.58
10:42:10 AM    0    0.00    0.00    8.56    0.00    0.00    0.00    0.00    0.00    0.00   91.44
10:42:10 AM    1    0.00    0.00   11.51    0.00    0.00    0.00    0.00    0.00    0.00   88.49
10:42:10 AM    2    0.21    0.00   12.63    0.00    0.00    0.00    0.00    0.00    0.00   87.16
10:42:10 AM    3    0.21    0.00   20.68    0.00    0.00    0.00    0.00    0.00    0.00   79.11

[root@fpm_nginx ~]# pidstat -u 3 4
Linux 3.10.0-957.el7.x86_64 (fpm_nginx) 	04/22/2020 	_x86_64_	(4 CPU)

10:43:02 AM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
10:43:05 AM     0        13    0.00    0.33    0.00    0.33     1  migration/1
10:43:05 AM     0      6119    0.00    0.33    0.00    0.33     2  tuned
10:43:05 AM     0      6405    0.00    0.33    0.00    0.33     2  sshd
10:43:05 AM     0      6630    0.00    8.28    0.00    8.28     1  kworker/u256:0
10:43:05 AM     0      6673    0.00   37.09    0.00   37.09     2  stress
10:43:05 AM     0      6674    0.00   17.88    0.00   17.88     0  kworker/u256:2
10:43:05 AM     0      6675    0.00    0.33    0.00    0.33     0  kworker/0:1
10:43:05 AM     0      6804    0.00    0.33    0.00    0.33     1  pidstat

注:磁盤的大量io會導致,負載的異常升高,比cpu的核心還高,會導致內核態的占比升高。

大量進程


[root@fpm_nginx ~]# stress -c 4 --timeout 600


# %idle 表示的是內核態
[root@fpm_nginx ~]# mpstat -P ALL 5
Linux 3.10.0-957.el7.x86_64 (fpm_nginx) 	04/22/2020 	_x86_64_	(4 CPU)

11:02:02 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
11:02:07 AM  all   99.72    0.00    0.11    0.00    0.00    0.17    0.00    0.00    0.00    0.00
11:02:07 AM    0   99.55    0.00    0.23    0.00    0.00    0.23    0.00    0.00    0.00    0.00
11:02:07 AM    1   99.78    0.00    0.00    0.00    0.00    0.22    0.00    0.00    0.00    0.00
11:02:07 AM    2   99.55    0.00    0.23    0.00    0.00    0.23    0.00    0.00    0.00    0.00
11:02:07 AM    3  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00

[root@fpm_nginx ~]# pidstat -u 3 4
Linux 3.10.0-957.el7.x86_64 (fpm_nginx) 	04/22/2020 	_x86_64_	(4 CPU)

11:02:25 AM   UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
11:02:28 AM     0      5819    0.00    0.32    0.00    1.30    0.32     2  vmtoolsd
11:02:28 AM     0      6119    0.00    0.32    0.00    0.00    0.32     2  tuned
11:02:28 AM     0      7950   97.40    0.00    0.00    0.97   97.40     3  stress
11:02:28 AM     0      7951   98.05    0.32    0.00    0.32   98.38     0  stress
11:02:28 AM     0      7952   98.05    0.32    0.00    0.65   98.38     2  stress
11:02:28 AM     0      7953   98.38    0.32    0.00    0.32   98.70     1  stress
11:02:28 AM     0      8013    0.32    0.32    0.00    0.32    0.65     3  pidstat

# 大量進程會導致用戶態升高

總結:

  1. 平均負載高有可能是CPU密集型進程導致的
  2. 平均負載高並不一定代表CPU的使用率就一定高,還有可能是I/O繁忙
  3. 當發現負載高時,可以使用mpstat、pidstat等工具,快速定位到,負載高的原因,從而做出處理





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM