Linux 压测工具---ab安装及参数

ab压测工具

ab是apache bench命令的缩写。

原理:

ab命令会创建多个并发访问线程,模拟多个访问者同时对某一URL地址进行访问。它的测试目标是基于URL的,因此,它既可以用来测试apache的负载压力,也可以测试nginx、lighthttp、tomcat、IIS等其它Web服务器的压力。

ab命令对发出负载的计算机要求很低,它既不会占用很高CPU,也不会占用很多内存。但却会给目标服务器造成巨大的负载,其原理类似CC攻击。测试时也需要注意,一次性太大的负载。可能会造成目标服务器资源占用过高,严重时可能会导致死机。

使用ab命令但是不想安装apache,我们可以直接安装apache的工具包httpd-tools,这里已腾讯云的云服务器为例。

安装
yum -y install httpd-tools
参数
[root@VM-2-14-centos ~]# ab --help
ab: wrong number of arguments
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  ##用于测试的最大秒数,等价于 -n 等于50000
    -s timeout      Seconds to max. wait for each response
                    Default is 30 seconds  ##等待每个响应的最长秒数,默认值为30秒
    -b windowsize   Size of TCP send/receive buffer, in bytes  ##TCP发送/接收缓存区的大小(字节)
    -B address      Address to bind to when making outgoing connections   ##建立传出连接时要绑定的地址
    -p postfile     File containing data to POST. Remember also to set -T  ##包含POST数据的文件。还需要设置-T
    -u putfile      File containing data to PUT. Remember also to set -T   ##包含PUT数据的文件,还需要设置-T
    -T content-type Content-type header to use for POST/PUT data, eg.
                    'application/x-www-form-urlencoded'
                    Default is 'text/plain'  ## 用于POST/PUT数据的内容类型头。
    -v verbosity    How much troubleshooting info to print  ##设置显示信息的详细程度 - 4或更大值会显示头信息, 3或更大值可以显示响应代码(404, 200等), 2或更大值可以显示警告和其他信息。
    -w              Print out results in HTML tables  以HTML表的格式输出结果。默认时,它是白色背景的两列宽度的一张表
    -i              Use HEAD instead of GET  ##执行HEAD请求,而不是GET
    -x attributes   String to insert as table attributes  ##设置<table>属性的字符串。
    -y attributes   String to insert as tr attributes  ##设置<tr>属性的字符串。
    -z attributes   String to insert as td or th attributes  ##设置<td>属性的字符串。
    -C attribute    Add cookie, eg. 'Apache=1234'. (repeatable)  ##对请求附加一个Cookie行。 其典型形式是name=value的一个参数对。 此参数可以重复。
    -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.  ##对服务器提供BASIC认证信任。 用户名和密码由一个:隔开,并以base64编码形式发送。 无论服务器是否需要(即, 是否发送了401认证需求代码),此字符串都会被发送。
    -P attribute    Add Basic Proxy Authentication, the attributes are a colon separated username and password.  ##对一个中转代理提供BASIC认证信任。 用户名和密码由一个:隔开,并以base64编码形式发送。 无论服务器是否需要(即, 是否发送了401认证需求代码),此字符串都会被发送
    -X proxy:port   Proxyserver and port number to use  ##对请求使用代理服务器。
    -V              Print version number and exit  ##显示版本号并退出。
    -k              Use HTTP KeepAlive feature  ##启用HTTP KeepAlive功能,即, 在一个HTTP会话中执行多个请求。 默认时,不启用KeepAlive功能。
    -d              Do not show percentiles served table.   ##显示”percentage served within XX [ms] table”的消息(为以前的版本提供支持)。
    -S              Do not show confidence estimators and warnings.  ##不显示中值和标准背离值, 而且在均值和中值为标准背离值的1到2倍时,也不显示警告或出错信息。 默认时,会显示 最小值/均值/最大值等数值。(为以前的版本提供支持)。
    -q              Do not show progress when doing more than 150 requests  ##如果处理的请求数大于150, ab每处理大约10%或者100个请求时,会在stderr输出一个进度计数。 此-q标记可以抑制这些信息。
    -l              Accept variable document length (use this for dynamic pages)  ##接受可变文档长度(用于动态页面)
    -g filename     Output collected data to gnuplot format file.  ##把所有测试结果写入一个’gnuplot’或者TSV (以Tab分隔的)文件。 此文件可以方便地导入到Gnuplot, IDL, Mathematica, Igor甚至Excel中。 其中的第一行为标题。
    -e filename     Output CSV file with percentages served  ##产生一个以逗号分隔的(CSV)文件, 其中包含了处理每个相应百分比的请求所需要(从1%到100%)的相应百分比的(以微妙为单位)时间。 由于这种格式已经“二进制化”,所以比’gnuplot’格式更有用。
    -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   ##禁用TLS服务器名称指示(SNI)扩展
    -Z ciphersuite  Specify SSL/TLS cipher suite (See openssl ciphers)  ##指定SSL/TLS密码套件。
    -f protocol     Specify SSL/TLS protocol (SSL2, TLS1, TLS1.1, TLS1.2 or ALL)  ##指定SSL/TLS协议(SSL2、TLS1、TLS1.1、TLS1.2或ALL)
    -E certfile     Specify optional client certificate chain and private key  ##指定可选的客户端证书链和私钥
压测返回结果解析

此处以该云服务器所属同一VPC的另一台云服务器为例:

ab -n 100 -c 100 http://172.16.1.6/

host之后必须有”/“,表示此目录而不是此文件;

[root@VM-1-4-centos ~]# ab -n 100 -c 100 http://172.16.1.6/
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 172.16.1.6 (be patient).....done


Server Software:        Apache/2.4.37   
Server Hostname:        172.16.1.6  ##域名或主机地址
Server Port:            80  ##请求端口号

Document Path:          /  ##文档路径
Document Length:        199691 bytes  页面字节数

Concurrency Level:      100  ##请求的并发数
Time taken for tests:   0.042 seconds  ##总访问时间
Complete requests:      100  ##请求成功数量
Failed requests:        0   ##请求失败数量
Non-2xx responses:      100   ##非2xx响应
Total transferred:      19996600 bytes  ##请求总数据大小(包括header头信息)
HTML transferred:       19969100 bytes  ##HTML页面实际总字节数
Requests per second:    2370.23 [#/sec] (mean)  ##每秒多少请求,这个是非常重要的参数数值,服务器的吞吐量
Time per request:       42.190 [ms] (mean)  ##用户平均请求等待时间
Time per request:       0.422 [ms] (mean, across all concurrent requests)  ##服务器平均处理时间,也就是服务器吞吐量的倒数
Transfer rate:          462856.83 [Kbytes/sec] received  ##每秒获取的数据长度

Connection Times (ms)  ##连接时间(ms)
              min  mean[+/-sd] median   max
Connect:        0    1   0.4      1       2   ##连接时间
Processing:     4   26  11.5     30      39   ##处理时间
Waiting:        0    6   4.1      5      13   ##等待时间
Total:          4   28  11.2     31      40   ##总时间
##           最小值  平均值        中值   最大值
Percentage of the requests served within a certain time (ms)
  50%     31     ##50%用户请求在31ms内返回
  66%     37     ##66%用户请求在37ms内返回
  75%     38     ##75%用户请求在38ms内返回
  80%     39     ##80%用户请求在39ms内返回
  90%     39     ##90%用户请求在39ms内返回
  95%     40     ##95%用户请求在40ms内返回
  98%     40     ##98%用户请求在40ms内返回
  99%     40     ##99%用户请求在40ms内返回
 100%     40 (longest request)     ##100%用户请求在40ms内返回

1、安装apache

yum install httpd #根据提示,输入Y安装即可成功安装

systemctl start httpd.service #启动apache

systemctl stop httpd.service #停止apache

systemctl restart httpd.service #重启apache

systemctl enable httpd.service #设置apache开机启动

2、启动http服务

httpd -version #检查是否安装 

yum install httpd #安装http服务

service httpd start #启动http服务

service httpd status #检查http服务状态(会显示绿色的active(running)表示启动成功)

service httpd restart #重启http服务

使用工具时报错apr_socket_recv: Connection refused (111),主要是因为没有监听端口,源端发送ack报文至目端的80端口,目端回复rst,源端视为拒绝连接,所以只需要开启HTTP服务,监听80端口即可;