ab & wrk 压力测试

前言

服务器压力测试工具 ab & wrk 安装与使用

ab

CentOS / RedHat / Fedora

执行如下命令进行安装:

1
yum install httpd-tools -y
Ubuntu / Debian

执行如下命令进行安装:

1
apt-get install apache2-utils -y
命令详解
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
-n requests 要执行的请求数
-c concurrency 并发请求数量
-t timelimit 测试所进行的最大秒数。其内部隐含值是-n 50000,它可以使对服务器的测试限制在一个固定的总时间以内。默认时,没有时间限制。
-s timeout 等待响应的最大时间(单位:秒)
默认30秒
-b windowsize TCP 发送/接收 缓冲区的大小,以字节为单位
-B address 指定在发起连接时绑定的 IP 地址
-p postfile POST请求的数据文件. 同时要设置 -T 参数
-u putfile PUT请求的数据文件. 同时要设置 -T 参数
-T content-type 指定使用 POST 或 PUT 上传文本时的文本类型,默认是 'text/plain'
-v verbosity 设置详细模式等级 1~4
-w 将结果输出到 HTML 的表中
-i 使用 HEAD 方式代替 GET 发起请求
-x attributes String to insert as table attributes
-y attributes 以表格方式输出时,设置 HTML 表格 TR 属性
-z attributes 以表格方式输出时,设置 HTML 表格 TR 或 TD 属性
-C attribute 添加 cookie
-H attribute 为请求追加一个额外的头部,比如'Accept-Encoding: gzip'
可重复参数
-A attribute Add Basic WWW Authentication, the attributes
are a colon separated username and password.
-P attribute Add Basic Proxy Authentication, the attributes
are a colon separated username and password.
-X proxy:port 指定代理服务器的 IP 和 端口
-V Print version number and exit
-k 启用 HTTP KeepAlive,即在一个 HTTP 会话中执行多个请求
-d Do not show percentiles served table.
-S Do not show confidence estimators and warnings.
-q Do not show progress when doing more than 150 requests
-g filename Output collected data to gnuplot format file.
-e filename Output CSV file with percentages served
-r 当收到错误时不要退出
-h Display usage information (this message)
-Z ciphersuite Specify SSL/TLS cipher suite (See openssl ciphers)
-f protocol Specify SSL/TLS protocol
(SSL3, TLS1, TLS1.1, TLS1.2 or ALL)

举个例子,100次请求,10个并发:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
ab -c 10 -n 100 https://blog.sonicshield.cn/
This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking blog.sonicshield.cn (be patient).....done
Server Software: nginx/1.12.2
Server Hostname: blog.sonicshield.cn
Server Port: 443
SSL/TLS Protocol: TLSv1.2,ECDHE-RSA-AES128-GCM-SHA256,2048,128
Document Path: /
Document Length: 29838 bytes
Concurrency Level: 10
// 整个测试持续的时间
Time taken for tests: 2.795 seconds
// 完成的请求数量
Complete requests: 10
Failed requests: 0
Write errors: 0
Total transferred: 299800 bytes
HTML transferred: 298380 bytes
// 平均每秒处理 3 个请求
Requests per second: 3.58 [#/sec] (mean)
// 平均每个请求的处理时间为 2794.759 毫秒 一次 10 个并发为一次请求
Time per request: 2794.759 [ms] (mean)
// 平均每个并发处理时间为 279.476 毫秒
Time per request: 279.476 [ms] (mean, across all concurrent requests)
Transfer rate: 104.76 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 84 99 11.5 100 117
Processing: 298 1685 712.3 1994 2226
Waiting: 298 1661 696.4 1993 1998
Total: 382 1783 719.4 2095 2325
// 在这个请求中有 50% 在 2095毫秒 中完成
Percentage of the requests served within a certain time (ms)
50% 2095
66% 2096
75% 2099
80% 2100
90% 2325
95% 2325
98% 2325
99% 2325
100% 2325 (longest request)

注意:ab 属于一个轻量级的压测工具,结果不会特别准确,可以为作参考

wrk

CentOS / RedHat / Fedora

执行如下命令进行安装:

1
2
3
4
5
6
sudo yum groupinstall 'Development Tools'
sudo yum install -y openssl-devel git
git clone https://github.com/wg/wrk.git wrk
cd wrk
make
sudo cp wrk /usr/local/bin
Ubuntu / Debian

执行如下命令进行安装:

1
2
3
4
5
sudo apt-get install build-essential libssl-dev git -y
git clone https://github.com/wg/wrk.git wrk
cd wrk
make
sudo cp wrk /usr/local/bin
命令详解
1
2
3
4
5
6
7
8
9
-c, --connections <N> 开启模拟的连接数
-d, --duration <T> 持续测试时间
-t, --threads <N> 使用线程数
-s, --script <S> 加载 Lua 脚本
-H, --header <H> 添加 Header
--latency 显示延迟统计
--timeout <T> Socket / request 超时的时间
-v, --version Print version details

举个例子,2个线程,50个并发链接,持续20秒:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
wrk -t 2 -c 50 -d 20 --latency https://blog.sonicshield.cn
Running 20s test @ https://blog.sonicshield.cn
2 threads and 50 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 403.93ms 0.00us 403.93ms 100.00%
Req/Sec 17.00 21.47 80.00 81.48%
Latency Distribution
50% 403.93ms
75% 403.93ms
90% 403.93ms
99% 403.93ms
100 requests in 20.02s, 2.88MB read
Socket errors: connect 0, read 0, write 0, timeout 99
Requests/sec: 4.99
Transfer/sec: 147.26KB
结果说明:
Latency:响应时间
Req/Sec:每个线程每秒钟的完成的请求数
Avg:平均
Max:最大
Stdev:标准差
----本文结束 感谢您的阅读----