51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

Linux下的压力测试工具:ab、http_load、webbench、siege

ab

ab是apache自带的一款功能强大的测试工具。安装了apache一般就自带了。

安装目录默认为:/usr/bin/ab

安装httpd-tools:

[root@4662b88202f1 ~]# yum -y install httpd-tools

ab命令帮助

[root@4662b88202f1 ~]# ab -h
Usage: ab [options] [http[s]://]hostname[:port]/path
Options are:
    -n requests     Number of requests to perform
    -c concurrency  Number of multiple requests to make at a time
    -t timelimit    Seconds to max. to spend on benchmarking
                    This implies -n 50000
    -s timeout      Seconds to max. wait for each response
                    Default is 30 seconds
    -b windowsize   Size of TCP send/receive buffer, in bytes
    -B address      Address to bind to when making outgoing connections
    -p postfile     File containing data to POST. Remember also to set -T
    -u putfile      File containing data to PUT. Remember also to set -T
    -T content-type Content-type header to use for POST/PUT data, eg.
                    'application/x-www-form-urlencoded'
                    Default is 'text/plain'
    -v verbosity    How much troubleshooting info to print
    -w              Print out results in HTML tables
    -i              Use HEAD instead of GET
    -x attributes   String to insert as table attributes
    -y attributes   String to insert as tr attributes
    -z attributes   String to insert as td or th attributes
    -C attribute    Add cookie, eg. 'Apache=1234'. (repeatable)
    -H attribute    Add Arbitrary header line, eg. 'Accept-Encoding: gzip'
                    Inserted after all normal header lines. (repeatable)
    -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   Proxyserver and port number to use
    -V              Print version number and exit
    -k              Use HTTP KeepAlive feature
    -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
    -l              Accept variable document length (use this for dynamic pages)
    -g filename     Output collected data to gnuplot format file.
    -e filename     Output CSV file with percentages served
    -r              Don't exit on socket receive errors.
    -m method       Method name
    -h              Display usage information (this message)
    -I              Disable TLS Server Name Indication (SNI) extension
    -Z ciphersuite  Specify SSL/TLS cipher suite (See openssl ciphers)
    -f protocol     Specify SSL/TLS protocol
                    (SSL2, TLS1, TLS1.1, TLS1.2 or ALL)
    -E certfile     Specify optional client certificate chain and private key

支持http及https,ab命令请求测试:

[root@4662b88202f1 ~]# ab -c 100 -n 1000 https://lolicp.com/
This is ApacheBench, Version 2.3 <$Revision: 1843412 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking lolicp.com (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests


Server Software:        WAF/2.4-12.1
Server Hostname:        lolicp.com
Server Port:            443
SSL/TLS Protocol:       TLSv1.2,ECDHE-RSA-AES256-GCM-SHA384,2048,256
Server Temp Key:        ECDH P-256 256 bits
TLS Server Name:        lolicp.com


Document Path:          /
Document Length:        46275 bytes


Concurrency Level:      100
Time taken for tests:   5.681 seconds
Complete requests:      1000
Failed requests:        0
Total transferred:      46753985 bytes
HTML transferred:       46275000 bytes
Requests per second:    176.03 \[#/sec\] (mean)
Time per request:       568.089 \[ms\] (mean)
Time per request:       5.681 \[ms\] (mean, across all concurrent requests)
Transfer rate:          8037.16 \[Kbytes/sec\] received


Connection Times (ms)
min  mean\[+/-sd\] median   max
Connect:      113  183 163.2    135    2044
Processing:    81  222 257.3    140    3962
Waiting:       36   87 115.7     48    2075
Total:        194  405 315.3    294    4092


Percentage of the requests served within a certain time (ms)
50%    294
66%    350
75%    443
80%    522
90%    690
95%    937
98%   1311
99%   1898
100%   4092 (longest request)
\[root@4662b88202f1 \~\]# ab -c 100 -n 1000 http://lolicp.com/
This is ApacheBench, Version 2.3 \<$Revision: 1843412 $\>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/


Benchmarking lolicp.com (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests


Server Software:        WAF/2.4-12.1
Server Hostname:        lolicp.com
Server Port:            80


Document Path:          /
Document Length:        176 bytes


Concurrency Level:      100
Time taken for tests:   0.965 seconds
Complete requests:      1000
Failed requests:        0
Non-2xx responses:      1000
Total transferred:      414000 bytes
HTML transferred:       176000 bytes
Requests per second:    1036.02 \[#/sec\] (mean)
Time per request:       96.523 \[ms\] (mean)
Time per request:       0.965 \[ms\] (mean, across all concurrent requests)
Transfer rate:          418.86 \[Kbytes/sec\] received


Connection Times (ms)
min  mean\[+/-sd\] median   max
Connect:       35   41   3.6     41      56
Processing:    35   43   7.1     42     125
Waiting:       35   42   7.1     41     125
Total:         71   83   9.5     83     170

`Percentage of the requests served within a certain time (ms)
50%     83
66%     84
75%     91
80%     92
90%     93
95%     94
98%     97
99%    120
100%    170 (longest request)`

http_load

http_load以并行复用的方式运行,用以测试web服务器的吞吐量与负载。但是它不同于大多数压力测试工具,它可以以一个单一的进程运行,一般不会把客户机搞死。还可以测试HTTPS类的网站请求。

软件官网页面:https://acme.com/software/http_load/

安装目录默认为:/usr/local/bin/http_load

下载压缩包并编译安装:

[root@dd643482f260 ~]# curl https://acme.com/software/http_load/http_load-09Mar2016.tar.gz -o http_load-09Mar2016.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 17339  100 17339    0     0  12142      0  0:00:01  0:00:01 --:--:-- 12133
[root@dd643482f260 ~]# tar xf http_load-09Mar2016.tar.gz 
[root@dd643482f260 ~]# cd http_load-09Mar2016
[root@dd643482f260 http_load-09Mar2016]# yum -y install make gcc gcc-c++
[root@dd643482f260 http_load-09Mar2016]# make
cc -O    -ansi -pedantic -U__STRICT_ANSI__ -Wall -Wpointer-arith -Wshadow -Wcast-qual -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -Wno-long-long -c timers.c
cc -O    -ansi -pedantic -U__STRICT_ANSI__ -Wall -Wpointer-arith -Wshadow -Wcast-qual -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -Wno-long-long http_load.c timers.o -s   -o http_load
[root@dd643482f260 http_load-09Mar2016]# make install
rm -f /usr/local/bin/http_load
cp http_load /usr/local/bin
rm -f /usr/local/man/man1/http_load.1
cp http_load.1 /usr/local/man/man1
cp: cannot create regular file '/usr/local/man/man1': No such file or directory
make: *** [Makefile:36: install] Error 1

查看帮助:

[root@dd643482f260 http_load-09Mar2016]# http_load -h
usage:  http_load [-checksum] [-throttle] [-proxy host:port] [-verbose] [-timeout secs] [-sip sip_file]
            -parallel N | -rate N [-jitter]
            -fetches N | -seconds N
            url_file
One start specifier, either -parallel or -rate, is required.
One end specifier, either -fetches or -seconds, is required.

进行测试:

[root@dd643482f260 http_load-09Mar2016]# echo 'http://lolicp.com/' > test.url
[root@dd643482f260 http_load-09Mar2016]# http_load -r 1000 -f 10000 test.url
10001 fetches, 29 max parallel, 1.76018e+06 bytes, in 81.6393 seconds
176 mean bytes/connection
122.502 fetches/sec, 21560.4 bytes/sec
msecs/connect: 68.771 mean, 127.372 max, 59.622 min
msecs/first-response: 65.3248 mean, 364.204 max, 35.49 min
HTTP response codes:
  code 301 -- 10001

如需开启https测试,需修改Makefile文件:

[root@a25372746bb5 http_load-09Mar2016]# sed -i 's/^#SSL_/SSL_/g' Makefile
[root@a25372746bb5 http_load-09Mar2016]# make
cc -O  -DUSE_SSL -I/usr/local/ssl/include -ansi -pedantic -U__STRICT_ANSI__ -Wall -Wpointer-arith -Wshadow -Wcast-qual -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -Wno-long-long -c timers.c
cc -O  -DUSE_SSL -I/usr/local/ssl/include -ansi -pedantic -U__STRICT_ANSI__ -Wall -Wpointer-arith -Wshadow -Wcast-qual -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -Wno-long-long http_load.c timers.o -s -L/usr/local/ssl/lib -lssl -lcrypto  -o http_load
http_load.c:45:10: fatal error: openssl/ssl.h: No such file or directory
 #include <openssl/ssl.h>
          ^~~~~~~~~~~~~~~
compilation terminated.
make: *** [Makefile:27: http_load] Error 1
`[root@a25372746bb5 http_load-09Mar2016]# yum -y install openssl-devel --nogpgcheck`

[root@a25372746bb5 http_load-09Mar2016]# make
cc -O  -DUSE_SSL -I/usr/local/ssl/include -ansi -pedantic -U__STRICT_ANSI__ -Wall -Wpointer-arith -Wshadow -Wcast-qual -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -Wno-long-long http_load.c timers.o -s -L/usr/local/ssl/lib -lssl -lcrypto  -o http_load
[root@a25372746bb5 http_load-09Mar2016]# make install
rm -f /usr/local/bin/http_load
cp http_load /usr/local/bin
rm -f /usr/local/man/man1/http_load.1
cp http_load.1 /usr/local/man/man1
cp: cannot create regular file '/usr/local/man/man1': No such file or directory
make: *** [Makefile:36: install] Error 1

开始https测试:

[root@a25372746bb5 http_load-09Mar2016]# echo 'https://lolicp.com/' > test.url
usage:  http_load [-checksum] [-throttle] [-proxy host:port] [-verbose] [-timeout secs] [-sip sip_file]
            [-cipher str]
            -parallel N | -rate N [-jitter]
            -fetches N | -seconds N
            url_file
One start specifier, either -parallel or -rate, is required.
One end specifier, either -fetches or -seconds, is required.
[root@a25372746bb5 http_load-09Mar2016]# http_load -r 100 -f 500 test.url 
501 fetches, 16 max parallel, 2.31838e+07 bytes, in 56.4463 seconds
46275 mean bytes/connection
8.87569 fetches/sec, 410723 bytes/sec
msecs/connect: 404.538 mean, 629.76 max, 74.803 min
msecs/first-response: 338.945 mean, 619.686 max, 120.153 min
HTTP response codes:
  code 200 -- 501
webbench

webbench是Linux下的一个网站压力测试工具,最多可以模拟3万个并发连接去测试网站的负载能力。

官方页面: http://home.tiscali.cz/~cz210552/webbench.html

安装目录默认为:/usr/local/bin/webbench

一次安装依赖:

yum -y install make gcc gcc-c++ ctags

开始下载并编译安装:

[root@7ff1fad0b95a ~]# curl http://home.tiscali.cz/~cz210552/distfiles/webbench-1.5.tar.gz -o webbench-1.5.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  7675  100  7675    0     0   8955      0 --:--:-- --:--:-- --:--:--  8945
[root@7ff1fad0b95a ~]# tar xf webbench-1.5.tar.gz 
[root@7ff1fad0b95a ~]# cd webbench-1.5
[root@7ff1fad0b95a webbench-1.5]# make
ctags *.c
[root@7ff1fad0b95a webbench-1.5]# make install
install -s webbench /usr/local/bin      
install -m 644 webbench.1 /usr/local/man/man1   
install: cannot create regular file '/usr/local/man/man1': No such file or directory
make: *** [Makefile:16: install] Error 1

遇到的报错:

[root@7ff1fad0b95a webbench-1.5]# make
 bash: make: command not found

解决方法

[root@7ff1fad0b95a webbench-1.5]# yum -y install make
[root@7ff1fad0b95a webbench-1.5]# make
 cc -Wall -ggdb -W -O   -c -o webbench.o webbench.c
 make: cc: Command not found
 make: *** [: webbench.o] Error 127
[root@7ff1fad0b95a webbench-1.5]# yum -y install gcc gcc-c++
[root@7ff1fad0b95a webbench-1.5]# make
 cc -Wall -ggdb -W -O   -c -o webbench.o webbench.c
 webbench.c:21:10: fatal error: rpc/types.h: No such file or directory
  #include 
           ^~~~~
 compilation terminated.
 make: *** [: webbench.o] Error 1
本处采用临时拷贝文件,请make完成后还原。通常系统中都存在该文件。
[root@7ff1fad0b95a webbench-1.5]# cp /usr/include/sys/types.h /usr/include/rpc/
[root@7ff1fad0b95a webbench-1.5]# make 
 cc -Wall -ggdb -W -O   -c -o webbench.o webbench.c
 webbench.c: In function 'alarm_handler':
 webbench.c:77:31: warning: unused parameter 'signal' [-Wunused-parameter]
  static void alarm_handler(int signal)
                            ~~^~~~
 cc -Wall -ggdb -W -O  -o webbench webbench.o  
 ctags *.c
 /bin/sh: ctags: command not found
 make: [Makefile:12: tags] Error 127 (ignored)
[root@7ff1fad0b95a webbench-1.5]# yum -y install ctags

webbench 命令帮助

[root@7ff1fad0b95a webbench-1.5]# webbench -h
webbench [option]... URL
  -f|--force               不要等待服务器的回复.
  -r|--reload              发送重新加载请求-语法: no-cache.
  -t|--time <sec>          运行基准测试<sec>秒。 默认30.
  -p|--proxy <server:port> 使用proxy服务进行请求.
  -c|--clients <n>         一次运行<n> HTTP客户端。 默认一个.
  -9|--http09              Use HTTP/0.9 样式请求.
  -1|--http10              Use HTTP/1.0 协议.
  -2|--http11              Use HTTP/1.1 协议.
  --get                    使用GET请求方法.
  --head                   使用HEAD请求方法.
  --options                使用OPTIONS请求方法.
  --trace                  使用TRACE请求方法.
  -?|-h|--help             This information.
  -V|--version             Display program version.

暂只支持http方式,不支持https。请求测试:

[root@7ff1fad0b95a webbench-1.5]# webbench -c 1000 -t 2 http://lolicp.com/
Webbench - Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.

Benchmarking: GET http://lolicp.com/
1000 clients, running 2 sec.

`Speed=78119 pages/min, 421452 bytes/sec.
Requests: 2604 susceed, 0 failed.`

siege

一款开源的压力测试工具,可以根据配置对一个WEB站点进行多用户的并发访问,记录每个用户所有请求过程的相应时间,并在一定数量的并发访问下重复进行

下载页面:http://download.joedog.org/siege/

默认安装目录:/usr/local/bin/siege

下载压缩包并编译

[root@ebf27f2e7b16 ~]# curl http://download.joedog.org/siege/siege-4.0.5.tar.gz -o siege-4.0.5.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  512k  100  512k    0     0  10103      0  0:00:51  0:00:51 --:--:--  3951
[root@ebf27f2e7b16 ~]# tar xf siege-4.0.5.tar.gz 
[root@ebf27f2e7b16 ~]# cd siege-4.0.5
[root@ebf27f2e7b16 siege-4.0.5]# yum -y install openssl-devel gcc make
[root@ebf27f2e7b16 siege-4.0.5]# ./configure --with-ssl=/usr/include/openssl/ &&make &&make install

查看siege帮助:

[root@ebf27f2e7b16 siege-4.0.5]# siege -h
SIEGE 4.0.5
Usage: siege [options]
       siege [options] URL
       siege -g URL
Options:
  -V, --version             VERSION, prints the version number.
  -h, --help                HELP, prints this section.
  -C, --config              CONFIGURATION, show the current config.
  -v, --verbose             VERBOSE, prints notification to screen.
  -q, --quiet               QUIET turns verbose off and suppresses output.
  -g, --get                 GET, pull down HTTP headers and display the
                            transaction. Great for application debugging.
  -p, --print               PRINT, like GET only it prints the entire page.
  -c, --concurrent=NUM      CONCURRENT users, default is 10
  -r, --reps=NUM            REPS, number of times to run the test.
  -t, --time=NUMm           TIMED testing where "m" is modifier S, M, or H
                            ex: --time=1H, one hour test.
  -d, --delay=NUM           Time DELAY, random delay before each request
  -b, --benchmark           BENCHMARK: no delays between requests.
  -i, --internet            INTERNET user simulation, hits URLs randomly.
  -f, --file=FILE           FILE, select a specific URLS FILE.
  -R, --rc=FILE             RC, specify an siegerc file
  -l, --log[=FILE]          LOG to FILE. If FILE is not specified, the
                            default is used: PREFIX/var/siege.log
  -m, --mark="text"         MARK, mark the log file with a string.
                            between .001 and NUM. (NOT COUNTED IN STATS)
  -H, --header="text"       Add a header to request (can be many)
  -A, --user-agent="text"   Sets User-Agent in request
  -T, --content-type="text" Sets Content-Type in request
  -j, --json-output         JSON OUTPUT, print final stats to stdout as JSON
      --no-parser           NO PARSER, turn off the HTML page parser
      --no-follow           NO FOLLOW, do not follow HTTP redirects
`Copyright (C) 2020 by Jeffrey Fulmer, et al.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE.`

siege压力测试结果:

[root@ebf27f2e7b16 siege-4.0.5]# siege -c 100 -r 1 https://lolicp.com/
`{    "transactions":                    3900,
"availability":                  100.00,
"elapsed_time":                   15.67,
"data_transferred":               32.07,
"response_time":                0.30,
"transaction_rate":              248.88,
"throughput":                    2.05,
"concurrency":                   75.81,
"successful_transactions":            3800,
"failed_transactions":                   0,
"longest_transaction":                7.13,
"shortest_transaction":                0.15
}`

赞(2)
未经允许不得转载:工具盒子 » Linux下的压力测试工具:ab、http_load、webbench、siege