系統的平均負載
如何理解平均負載
單位時間內,系統處於可運行狀態和不可中斷狀態的平均進程數,也就是平均活躍進程數。
平均負載多少合理
核心數 | 平均負載 | 含義 |
---|---|---|
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
# 大量進程會導致用戶態升高
總結:
- 平均負載高有可能是CPU密集型進程導致的
- 平均負載高並不一定代表CPU的使用率就一定高,還有可能是I/O繁忙
- 當發現負載高時,可以使用mpstat、pidstat等工具,快速定位到,負載高的原因,從而做出處理