- 🤔 目录 🍟 -
ab & wrk 压力测试
分别使用 Apache AB & wrk 压力测试

前言

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

ab

CentOS / RedHat / Fedora

执行如下命令进行安装:

yum install httpd-tools -y
Ubuntu / Debian

执行如下命令进行安装:

apt-get install apache2-utils -y
命令详解
-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个并发:

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

执行如下命令进行安装:

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

执行如下命令进行安装:

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
命令详解
-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秒:

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:标准差

最后修改于 2019-05-29

此篇文章的评论功能已经停用。