如何對你的 Linux 系統進行壓力測試
為什麼你會想給你的 Linux 系統施加壓力呢?因為有時你可能想知道當一個系統由於大量運行的進程、繁重的網路流量、過多的內存使用等原因而承受很大的壓力時,它的表現如何。這種壓力測試可以幫助確保系統已經做好了 「上市」 的準備。
如果你需要預測應用程序可能需要多長時間才能做出反應,以及哪些(如果有的話)進程可能會在重負載下失敗或運行緩慢,那麼在前期進行壓力測試是一個非常好的主意。
幸運的是,對於那些需要能夠預測 Linux 系統在壓力下的反應的人來說,你可以採用一些有用的技術和工具來使這個過程更容易。在這篇文章中,我們將研究其中的一些。
自己動手做個循環
第一種技術是在命令行上運行一些循環,觀察它們對系統的影響。這種方式可以大大增加 CPU 的負荷。使用 uptime
或類似的命令可以很容易地看到結果。
在下面的命令中,我們啟動了四個無盡循環。你可以通過添加數字或使用 bash 表達式,如 {1...6}
來代替 1 2 3 4
以增加循環次數:
for i in 1 2 3 4; do while : ; do : ; done & done
在命令行上輸入後,將在後台啟動四個無盡循環:
$ for i in 1 2 3 4; do while : ; do : ; done & done
[1] 205012
[2] 205013
[3] 205014
[4] 205015
在這種情況下,發起了作業 1-4,作業號和進程號會相應顯示出來。
要觀察對平均負載的影響,請使用如下所示的命令。在本例中,uptime
命令每 30 秒運行一次:
$ while true; do uptime; sleep 30; done
如果你打算定期運行這樣的測試,你可以將循環命令放入腳本 watch-it
中。
#!/bin/bash
while true
do
uptime
sleep 30
done
在輸出中,你可以看到平均負載是如何增加的,然後在循環結束後又開始下降。
11:25:34 up 5 days, 17:27, 2 users, load average: 0.15, 0.14, 0.08
11:26:04 up 5 days, 17:27, 2 users, load average: 0.09, 0.12, 0.08
11:26:34 up 5 days, 17:28, 2 users, load average: 1.42, 0.43, 0.18
11:27:04 up 5 days, 17:28, 2 users, load average: 2.50, 0.79, 0.31
11:27:34 up 5 days, 17:29, 2 users, load average: 3.09, 1.10, 0.43
11:28:04 up 5 days, 17:29, 2 users, load average: 3.45, 1.38, 0.54
11:28:34 up 5 days, 17:30, 2 users, load average: 3.67, 1.63, 0.66
11:29:04 up 5 days, 17:30, 2 users, load average: 3.80, 1.86, 0.76
11:29:34 up 5 days, 17:31, 2 users, load average: 3.88, 2.06, 0.87
11:30:04 up 5 days, 17:31, 2 users, load average: 3.93, 2.25, 0.97
11:30:34 up 5 days, 17:32, 2 users, load average: 3.64, 2.35, 1.04 <== 循環停止
11:31:04 up 5 days, 17:32, 2 users, load average: 2.20, 2.13, 1.01 11:31:34 up 5 days, 17:33, 2 users, load average: 1.40, 1.94, 0.98
因為所顯示的負載分別代表了 1、5 和 15 分鐘的平均值,所以這些值需要一段時間才能恢復到系統接近正常的狀態。
要停止循環,請發出像下面這樣的 kill
命令 —— 假設作業號是 1-4,就像本篇文章前面顯示的那樣。如果你不確定,可以使用 jobs
命令來確認作業號。
$ kill %1 %2 %3 %4
增加壓力的專用工具
另一種方法是使用專門為你製造系統壓力的工具。其中一種叫做 stress
(壓力),可以以多種方式對系統進行壓力測試。stress
工具是一個工作負載生成器,提供 CPU、內存和磁碟 I/O 壓力測試。
在使用 --cpu
選項時,stress
命令使用平方根函數強制 CPU 努力工作。指定的 CPU 數量越多,負載上升的速度就越快。
下面第二個腳本(watch-it-2
)可以用來衡量對系統內存使用的影響。請注意,它使用 free
命令來查看加壓的效果。
$ cat watch-it-2
#!/bin/bash
while true
do
free
sleep 30
done
發起任務並觀察壓力:
$ stress --cpu 2
$ ./watch-it
13:09:14 up 5 days, 19:10, 2 users, load average: 0.00, 0.00, 0.00
13:09:44 up 5 days, 19:11, 2 users, load average: 0.68, 0.16, 0.05
13:10:14 up 5 days, 19:11, 2 users, load average: 1.20, 0.34, 0.12
13:10:44 up 5 days, 19:12, 2 users, load average: 1.52, 0.50, 0.18
13:11:14 up 5 days, 19:12, 2 users, load average: 1.71, 0.64, 0.24
13:11:44 up 5 days, 19:13, 2 users, load average: 1.83, 0.77, 0.30
在命令行中指定的 CPU 越多,負載就增加的越快。
$ stress --cpu 4
$ ./watch-it
13:47:49 up 5 days, 19:49, 2 users, load average: 0.00, 0.00, 0.00
13:48:19 up 5 days, 19:49, 2 users, load average: 1.58, 0.38, 0.13
13:48:49 up 5 days, 19:50, 2 users, load average: 2.61, 0.75, 0.26
13:49:19 up 5 days, 19:50, 2 users, load average: 3.16, 1.06, 0.38
13:49:49 up 5 days, 19:51, 2 users, load average: 3.49, 1.34, 0.50
13:50:19 up 5 days, 19:51, 2 users, load average: 3.69, 1.60, 0.61
stress
命令也可以通過 --io
(輸入/輸出)和 --vm
(內存)選項增加 I/O 和內存的負載來給系統施加壓力。
在接下來的這個例子中,運行這個增加內存壓力的命令,然後啟動 watch-it-2
腳本。
$ stress --vm 2
$ watch-it-2
total used free shared buff/cache available
Mem: 6087064 662160 2519164 8868 2905740 5117548
Swap: 2097148 0 2097148
total used free shared buff/cache available
Mem: 6087064 803464 2377832 8864 2905768 4976248
Swap: 2097148 0 2097148
total used free shared buff/cache available
Mem: 6087064 968512 2212772 8864 2905780 4811200
Swap: 2097148 0 2097148
stress
的另一個選項是使用 --io
選項為系統添加輸入/輸出活動。在這種情況下,你可以使用這樣的命令:
$ stress --io 4
然後你可以使用 iotop
觀察受壓的 I/O。注意,運行 iotop
需要 root 許可權。
之前:
$ sudo iotop -o
Total DISK READ: 0.00 B/s | Total DISK WRITE: 19.36 K/s
Current DISK READ: 0.00 B/s | Current DISK WRITE: 27.10 K/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
269308 be/4 root 0.00 B/s 0.00 B/s 0.00 % 1.24 % [kworker~fficient]
283 be/3 root 0.00 B/s 19.36 K/s 0.00 % 0.26 % [jbd2/sda1-8]
之後:
Total DISK READ: 0.00 B/s | Total DISK WRITE: 0.00 B/s
Current DISK READ: 0.00 B/s | Current DISK WRITE: 0.00 B/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
270983 be/4 shs 0.00 B/s 0.00 B/s 0.00 % 51.45 % stress --io 4
270984 be/4 shs 0.00 B/s 0.00 B/s 0.00 % 51.36 % stress --io 4
270985 be/4 shs 0.00 B/s 0.00 B/s 0.00 % 50.95 % stress --io 4
270982 be/4 shs 0.00 B/s 0.00 B/s 0.00 % 50.80 % stress --io 4
269308 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.09 % [kworker~fficient]
stress
只是給系統增加壓力的若干工具之一。另一個較新的工具,stress-ng
,將在以後的文章中介紹。
總結
用於系統壓力測試的各種工具可以幫助你預測系統在真實世界的情況下如何響應,在這些情況下,它們受到增加的流量和計算需求。
雖然我們在文章中展示的是創建和測量各種類型的壓力的方法,但最終的好處是壓力如何幫助確定你的系統或應用程序對它的反應。
via: https://www.networkworld.com/article/3563334/how-to-stress-test-your-linux-system.html
作者:Sandra Henry-Stocker 選題:lujun9972 譯者:wxy 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive