stress-Linux系統壓力測試工具使用及系統負載很高的幾種場景測試

安裝

yum install stress stress-ng -ynginx

stess-ng是stress的下一代,功能更加完善bash

經常使用選項多線程

-c,--cpu:表明進程個數(每一個進程會佔用一個cpu,當超出cpu個數時,進程間會互相爭用cpu)ssh

-t,--timeout:測試時長(超出這個時間後自動退出)ide

-i,--io:表示調用sync(),它表示經過系統調用 sync() 來模擬 I/O 的問題;測試

 但這種方法實際上並不可靠,由於 sync() 的本意是刷新內存緩衝區的數據到磁盤中,以確保同步。spa

 若是緩衝區內原本就沒多少數據,那讀寫到磁盤中的數據也就很少,也就無法產生 I/O 壓力。線程

 這一點,在使用 SSD 磁盤的環境中尤其明顯,極可能你的 iowait 老是 0,卻單純由於大量的系統調用,致使了系統CPU使用率 sys 升高。orm

 這種狀況,推薦使用 stress-ng 來代替 stress。進程

場景一:CPU 密集型進程(使用CPU的進程)

使用2顆CPU
[root@nginx ~]#   stress --cpu 2 --timeout 600

[root@nginx ~]# uptime
10:33:44 up 28 min,  4 users,  load average: 1.99, 1.39, 0.81
 
[root@nginx ~]# mpstat -P ALL 5 1
Average:     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
Average:     all   50.05    0.00    0.08    0.00    0.00    0.00    0.00    0.00    0.00   49.87
Average:       0    0.07    0.00    0.17    0.00    0.00    0.01    0.00    0.00    0.00   99.75
Average:       1  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
Average:       2  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
Average:       3    0.08    0.00    0.15    0.01    0.00    0.01    0.00    0.00    0.00   99.76

[root@nginx sysstat-12.1.5]# pidstat -u 5

1.經過uptime能夠觀察到,系統平均負載很高,經過mpstat觀察到2個CPU使用率很高,平均負載也很高,而iowait爲0,說明進程是CPU密集型的;
2.是由進程使用CPU密集致使系統平均負載變高、CPU使用率變高; 
3.能夠經過pidstat查看是哪一個進程致使CPU使用率較高

場景二:I/O 密集型進程(等待IO的進程)

對IO進行壓測(使用stress觀測到的iowait指標可能爲0,因此使用stress-ng)
[root@nginx ~]# stress-ng -i 4 --hdd 1 --timeout 600

[root@nginx ~]# uptime
11:11:12 up  1:05,  4 users,  load average: 4.35, 4.11, 3.65
 
[root@nginx ~]# mpstat -P ALL 5
Average:     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
Average:     all    0.20    0.00   13.04   38.70    0.00    1.33    0.00    0.00    0.00   46.73
Average:       0    0.07    0.00    6.63   40.96    0.00    3.72    0.00    0.00    0.00   48.62
Average:       1    0.19    0.00   20.14   26.77    0.00    0.04    0.00    0.00    0.00   52.85
Average:       2    0.27    0.00   13.81   45.15    0.00    0.88    0.00    0.00    0.00   39.89
Average:       3    0.27    0.00   11.22   42.20    0.00    0.80    0.00    0.00    0.00   45.51

[root@nginx sysstat-12.1.5]# pidstat -u 5

1.能夠經過uptime觀察到,系統平均負載很高,經過mpstat觀察到CPU使用很低,iowait很高,一直在等待IO處理,說明此進程是IO密集型的;
2.是由進程頻繁的進行IO操做,致使系統平均負載很高而CPU使用率不高的狀況;

場景三:大量進程的場景(等待CPU的進程->進程間會爭搶CPU)

模擬16個進程,本機是4核
[root@nginx ~]# stress -c 16 --timeout 600

[root@nginx ~]# uptime
11:23:24 up  1:18,  4 users,  load average: 15.10, 8.98, 6.04

[root@nginx ~]# mpstat -P ALL 5
Average:     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
Average:     all   99.92    0.00    0.08    0.00    0.00    0.00    0.00    0.00    0.00    0.00
Average:       0   99.87    0.00    0.13    0.00    0.00    0.00    0.00    0.00    0.00    0.00
Average:       1   99.96    0.00    0.04    0.00    0.00    0.00    0.00    0.00    0.00    0.00
Average:       2   99.90    0.00    0.10    0.00    0.00    0.00    0.00    0.00    0.00    0.00
Average:       3   99.93    0.00    0.07    0.00    0.00    0.00    0.00    0.00    0.00    0.00

[root@nginx sysstat-12.1.5]# pidstat -u 5 1
Linux 3.10.0-957.21.3.el7.x86_64 (nginx) 	07/10/2019 	_x86_64_	(4 CPU)

11:23:07 AM   UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
11:23:12 AM     0     23613   25.15    0.00    0.00   75.25   25.15     1  stress
11:23:12 AM     0     23614   24.95    0.00    0.00   75.45   24.95     0  stress
11:23:12 AM     0     23615   25.15    0.00    0.00   75.25   25.15     0  stress
11:23:12 AM     0     23616   24.95    0.00    0.00   74.65   24.95     0  stress
11:23:12 AM     0     23617   25.15    0.00    0.00   74.85   25.15     1  stress
11:23:12 AM     0     23618   24.75    0.00    0.00   75.25   24.75     1  stress
11:23:12 AM     0     23619   24.75    0.00    0.00   75.85   24.75     2  stress
11:23:12 AM     0     23620   24.55    0.00    0.00   75.65   24.55     2  stress
11:23:12 AM     0     23621   25.35    0.00    0.00   74.85   25.35     3  stress
11:23:12 AM     0     23622   25.35    0.00    0.00   74.45   25.35     3  stress
11:23:12 AM     0     23623   25.15    0.00    0.00   75.65   25.15     1  stress
11:23:12 AM     0     23624   25.35    0.00    0.00   74.45   25.35     3  stress
11:23:12 AM     0     23625   24.55    0.00    0.00   75.45   24.55     2  stress
11:23:12 AM     0     23626   24.95    0.00    0.00   75.45   24.95     0  stress
11:23:12 AM     0     23627   24.75    0.00    0.00   75.65   24.75     3  stress
11:23:12 AM     0     23628   24.55    0.00    0.00   75.05   24.55     2  stress
11:23:12 AM     0     23803    0.20    0.40    0.00    0.80    0.60     2  watch
11:23:12 AM     0     24022    0.00    0.20    0.00    0.00    0.20     2  pidstat

1.經過uptime觀察到系統平均負載很高,經過mpstat觀察到CPU使用率也很高,iowait爲0,說明此進程是CPU密集型的,或者在進行CPU的爭用;
2.經過pidstat -u觀察到wait指標很高,則說明進程間存在CPU爭用的狀況,能夠判斷系統中存在大量的進程在等待使用CPU;
3.大量的進程,超出了CPU的計算能力,致使的系統的平均負載很高;

場景四:單進程多線程(大量線程形成上下文切換,從而形成系統負載升高)

模擬10個線程,對系統進行基準測試
[root@nginx ~]# sysbench --threads=10 --time=300 threads run

能夠看到平均1分鐘的系統再升高
[root@nginx ~]# uptime
16:43:41 up  6:38,  4 users,  load average: 4.82, 2.10, 0.84

能夠看到sys(內核態)對CPU的使用率比較高,iowait無(表示沒有進程間的爭用)
[root@nginx ~]# mpstat -P ALL 5
Average:     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
Average:     all   23.92    0.00   68.92    0.00    0.00    0.00    0.00    0.00    0.00    7.16
Average:       0   24.11    0.00   68.77    0.00    0.00    0.00    0.00    0.00    0.00    7.12
Average:       1   24.02    0.00   68.41    0.00    0.00    0.00    0.00    0.00    0.00    7.56
Average:       2   23.74    0.00   69.40    0.00    0.00    0.01    0.00    0.00    0.00    6.85
Average:       3   23.79    0.00   69.10    0.00    0.00    0.00    0.00    0.00    0.00    7.10

能夠看到無進程間的上下文切換(默認是進程間的)
[root@nginx ~]# pidstat -w  3
04:45:46 PM   UID       PID   cswch/s nvcswch/s  Command
04:45:49 PM     0         9      2.67      0.00  rcu_sched
04:45:49 PM     0        11      0.33      0.00  watchdog/0
04:45:49 PM     0        12      0.33      0.00  watchdog/1
04:45:49 PM     0        14      0.67      0.00  ksoftirqd/1
04:45:49 PM     0        17      0.33      0.00  watchdog/2
04:45:49 PM     0        22      0.33      0.00  watchdog/3
04:45:49 PM     0       556     19.67      0.00  xfsaild/dm-0
04:45:49 PM     0     21287      0.33      0.00  sshd
04:45:49 PM     0     26834      1.00      0.00  kworker/u256:0
04:45:49 PM     0     30955      1.00      0.00  kworker/2:2
04:45:49 PM     0     31207      1.67      0.00  kworker/0:2
04:45:49 PM     0     31778      2.00      0.00  kworker/3:1
04:45:49 PM     0     32262      0.33      0.00  pidstat
04:45:49 PM     0     32263      1.00      0.00  kworker/1:1
04:45:49 PM     0     32350      0.33      0.00  kworker/3:0

能夠看到存在大量的非自願上下文切換(表示線程間爭用引發的上下文切換,形成系統負載升高)
[root@nginx ~]# pidstat -w -t 3
04:48:35 PM   UID      TGID       TID   cswch/s nvcswch/s  Command
04:48:41 PM     0     32597         -      1.67      0.33  sysbench
04:48:41 PM     0         -     32597      1.67      0.33  |__sysbench
04:48:41 PM     0         -     32598   8932.67  63606.33  |__sysbench
04:48:41 PM     0         -     32599  10554.00  52275.33  |__sysbench
04:48:41 PM     0         -     32600  10941.00  49976.67  |__sysbench
04:48:41 PM     0         -     32601   9393.67  50796.33  |__sysbench
04:48:41 PM     0         -     32602  10196.67  50815.33  |__sysbench
04:48:41 PM     0         -     32603   9538.67  54755.00  |__sysbench
04:48:41 PM     0         -     32604  10112.33  50476.67  |__sysbench
04:48:41 PM     0         -     32605   9135.67  53922.00  |__sysbench
04:48:41 PM     0         -     32606  10506.33  55677.00  |__sysbench
04:48:41 PM     0         -     32607  10346.33  55691.67  |__sysbench
相關文章
相關標籤/搜索