ab参数详解 – 压力测试

原文:http://blog.linuxeye.com/124.html

Apache附带的ab,它非常容易使用,ab可以直接在Web服务器本地发起测试请求。这至关重要,因为我们希望测试的服务器的处理时间,而不包含数据的网络传输时间以及用户PC本地的计算时间。

需要清楚的是,ab进行一切测试的本质都是基于HTTP,所以可以说它是对于Web服务器软件的黑盒性能测试,它获得的一切数据和计算结果,都可以通过HTTP来解释。

另有一些压力测试软件,包括LoadRnner、Jmeter等,则是不同程度上包含了服务器处理之外的时间,比如LoadRunner运行在用户PC上,可以录制浏览器行为,这种测试的结果玩玩侧重于站点用户的角度,有另外一些层面的参考意义。

接下来,将使用ab来进行一次压力测试,在本书中我们使用Apache 2.3中附带的ab,其版本信息如下所示:

[[email protected] ~]#/usr/local/apache/bin/ab -VThis is ApacheBench,Version2.3<$Revision:655654 $>Copyright1996AdamTwiss,ZeusTechnologyLtd, http://www.zeustech.net/Licensed to TheApacheSoftwareFoundation, http://www.apache.org/

请看下面的命令行信息:

[[email protected] ~]# /usr/local/apache/bin/ab -n1000 -c10 http://localhost/index.htmlThis is ApacheBench,Version2.3<$Revision:655654 $>Copyright1996AdamTwiss,ZeusTechnologyLtd, http://www.zeustech.net/Licensed to TheApacheSoftwareFoundation, http://www.apache.org/Benchmarking localhost (be patient)Completed100 requests
Completed200 requests
Completed300 requests
Completed400 requests
Completed500 requests
Completed600 requests
Completed700 requests
Completed800 requests
Completed900 requests
Completed1000 requests
Finished1000 requests

ServerSoftware:Apache/2.2.19ServerHostname:        localhost
ServerPort:80DocumentPath:/index.html
DocumentLength:45 bytes

ConcurrencyLevel:10Time taken for tests:0.454 seconds
Complete requests:1000Failed requests:0Write errors:0Total transferred:322644 bytes
HTML transferred:45090 bytes
Requests per second:2204.64[#/sec] (mean)Time per request:4.536[ms](mean)Time per request:0.454[ms](mean, across all concurrent requests)Transfer rate:694.64[Kbytes/sec] received

ConnectionTimes(ms)
              min  mean[+/-sd] median   max
Connect:010.515Processing:135.6262Waiting:035.6262Total:145.6363Percentage of the requests served within a certain time (ms)50%366%475%480%490%695%1298%2699%33100%63(longest request)

请注意我们在启动ab时,传入3个命令行参数,它们正是代表了前面提到的前提条件:
-n1000 表示总请求数位1000
-c 表示并发用户数为10
http://localhost/index.html 表示这些请求的目标URL。
测试结果一目了然,我们看到吞吐率显示为2204.64reqs/s。同时,在测试结果中还有一些其他内容也值得我们关注,主要包括:
Server Software
表示被测试的Web服务器软件名称,这里是Apache/2.2.19,它来自于http响应数据的头信息,所以如果是我们自己编写的Web服务器软或者修改开源Web服务器软件的源代码,便可以随意改写这里的名称。
vi /usr/local/apache/conf/httpd.conf #隐藏具体版本信息
ServerSignature Off
ServerTokens Prod

Server Hostname
表示请求的URL中的主机部分名称,它来自于http请求数据的头信息,这里我们请求的URL是http://localhost/index.html,所以主机名为localhost,说明我们的请求是从Web服务器端发起的。

Server Port
表示被测试的Web服务器软件的监听端口,为了方便测试,我们后面会对多个不同的Web服务器软件使用不同的监听端口。

Document Path
表示请求的URL中根绝对路径,它同样来自于http请求数据的头信息,通过它的后缀名,我们一般可以理解该请求的类型。

Document Length
表示http响应数据的正文长度。

Concurrency Level
表示并发用户数,这是我们设置的参数。

Time taken for tests
表示所有这些请求被处理完成花费的总时间。顺便提一下,某些Apache版本如2.2.4附带的ab,对于这一统计项存在一些计算上的bug,当总请求数较少时,其统计的总时间会无法小于0.1s。

Complete requests
表示总请求数,这是我们设置的相应参数。

Failed requests
表示失败的请求数,这里的失败是指请求的连接服务器、发送数据、接收数据等环节发生异常,以及无响应后超时的情况。对于超时时间的设置可以用ab的-t参数。
而如果接受到的http响应数据的头信息中含有2xx以外的状态码,则会在测试结果显示另一个名为“Non-2xx responses”的统计项,用于统计这部分请求数,这些请求并不算是失败的请求。

Total transferred
表示所有请求的响应数据长度总和,包括每个http响应数据的头信息和正文数据的长度。注意这里不包括http请求数据的长度,所以Total
transferred代表了从Web服务器流向用户PC的应用层数据总长度。通过使用ab的-v参数即可查看详细的http头信息。

HTML transferred
表示所有请求的响应数据中正文数据的总和,也就是减去了Total transferred中http响应数据中头信息的长度。

Requests per second
这便是我们重点关注的吞吐率,它等于:
Complete requests / Time taken for tests

Time per request
这便是前面提到的用户平均请求等待时间,它等于:
Time taken for tests / (Complete requests /Concurrency Level)

Time per request?(across all concurrent requests)
这便是前面提到的服务器平均请求处理时间,它等于:
Time taken for tests / Complete requests

这正是吞吐率的倒数。同时,它也等于:
Time per request / Concurrency Level

Transfer rate
表示这些请求在单位时间内从服务器获取的数据长度,它等于:
Total transferred / Time taken for tests
这个统计项可以很好的说明服务器在处理能力达到限制时,其出口带宽的需求量。
利用前面介绍的有关带宽的知识,不难计算出结果。

Percentage of the requests served within a certain time(ms)
这部分数据用于描述每个请求处理时间的分布情况,比如在以上测试结果中,80%请求的处理时间都不超过1ms,而99%的请求都不超过2ms。注意这里的处理时间,是指前面的Time per request,即对于单个用户而言,平均每个请求处理的时间。

继续压力测试
下面,我们再来进行一次压力测试,此时并发用户数为100,其他条件不变,测试结果如下所示:

[[email protected] ~]# /usr/local/apache/bin/ab -n1000 -c100 http://localhost/index.htmlThis is ApacheBench,Version2.3<$Revision:655654 $>Copyright1996AdamTwiss,ZeusTechnologyLtd, http://www.zeustech.net/Licensed to TheApacheSoftwareFoundation, http://www.apache.org/Benchmarking localhost (be patient)Completed100 requests
Completed200 requests
Completed300 requests
Completed400 requests
Completed500 requests
Completed600 requests
Completed700 requests
Completed800 requests
Completed900 requests

原文:http://blog.linuxeye.com/124.html

Apache附带的ab,它非常容易使用,ab可以直接在Web服务器本地发起测试请求。这至关重要,因为我们希望测试的服务器的处理时间,而不包含数据的网络传输时间以及用户PC本地的计算时间。

需要清楚的是,ab进行一切测试的本质都是基于HTTP,所以可以说它是对于Web服务器软件的黑盒性能测试,它获得的一切数据和计算结果,都可以通过HTTP来解释。

另有一些压力测试软件,包括LoadRnner、Jmeter等,则是不同程度上包含了服务器处理之外的时间,比如LoadRunner运行在用户PC上,可以录制浏览器行为,这种测试的结果玩玩侧重于站点用户的角度,有另外一些层面的参考意义。

接下来,将使用ab来进行一次压力测试,在本书中我们使用Apache 2.3中附带的ab,其版本信息如下所示:

[[email protected] ~]#/usr/local/apache/bin/ab -VThis is ApacheBench,Version2.3<$Revision:655654 $>Copyright1996AdamTwiss,ZeusTechnologyLtd, http://www.zeustech.net/Licensed to TheApacheSoftwareFoundation, http://www.apache.org/

请看下面的命令行信息:

[[email protected] ~]# /usr/local/apache/bin/ab -n1000 -c10 http://localhost/index.htmlThis is ApacheBench,Version2.3<$Revision:655654 $>Copyright1996AdamTwiss,ZeusTechnologyLtd, http://www.zeustech.net/Licensed to TheApacheSoftwareFoundation, http://www.apache.org/Benchmarking localhost (be patient)Completed100 requests
Completed200 requests
Completed300 requests
Completed400 requests
Completed500 requests
Completed600 requests
Completed700 requests
Completed800 requests
Completed900 requests
Completed1000 requests
Finished1000 requests

ServerSoftware:Apache/2.2.19ServerHostname:        localhost
ServerPort:80DocumentPath:/index.html
DocumentLength:45 bytes

ConcurrencyLevel:10Time taken for tests:0.454 seconds
Complete requests:1000Failed requests:0Write errors:0Total transferred:322644 bytes
HTML transferred:45090 bytes
Requests per second:2204.64[#/sec] (mean)Time per request:4.536[ms](mean)Time per request:0.454[ms](mean, across all concurrent requests)Transfer rate:694.64[Kbytes/sec] received

ConnectionTimes(ms)
              min  mean[+/-sd] median   max
Connect:010.515Processing:135.6262Waiting:035.6262Total:145.6363Percentage of the requests served within a certain time (ms)50%366%475%480%490%695%1298%2699%33100%63(longest request)

请注意我们在启动ab时,传入3个命令行参数,它们正是代表了前面提到的前提条件:
-n1000 表示总请求数位1000
-c 表示并发用户数为10
http://localhost/index.html 表示这些请求的目标URL。
测试结果一目了然,我们看到吞吐率显示为2204.64reqs/s。同时,在测试结果中还有一些其他内容也值得我们关注,主要包括:
Server Software
表示被测试的Web服务器软件名称,这里是Apache/2.2.19,它来自于http响应数据的头信息,所以如果是我们自己编写的Web服务器软或者修改开源Web服务器软件的源代码,便可以随意改写这里的名称。
vi /usr/local/apache/conf/httpd.conf #隐藏具体版本信息
ServerSignature Off
ServerTokens Prod

Server Hostname
表示请求的URL中的主机部分名称,它来自于http请求数据的头信息,这里我们请求的URL是http://localhost/index.html,所以主机名为localhost,说明我们的请求是从Web服务器端发起的。

Server Port
表示被测试的Web服务器软件的监听端口,为了方便测试,我们后面会对多个不同的Web服务器软件使用不同的监听端口。

Document Path
表示请求的URL中根绝对路径,它同样来自于http请求数据的头信息,通过它的后缀名,我们一般可以理解该请求的类型。

Document Length
表示http响应数据的正文长度。

Concurrency Level
表示并发用户数,这是我们设置的参数。

Time taken for tests
表示所有这些请求被处理完成花费的总时间。顺便提一下,某些Apache版本如2.2.4附带的ab,对于这一统计项存在一些计算上的bug,当总请求数较少时,其统计的总时间会无法小于0.1s。

Complete requests
表示总请求数,这是我们设置的相应参数。

Failed requests
表示失败的请求数,这里的失败是指请求的连接服务器、发送数据、接收数据等环节发生异常,以及无响应后超时的情况。对于超时时间的设置可以用ab的-t参数。
而如果接受到的http响应数据的头信息中含有2xx以外的状态码,则会在测试结果显示另一个名为“Non-2xx responses”的统计项,用于统计这部分请求数,这些请求并不算是失败的请求。

Total transferred
表示所有请求的响应数据长度总和,包括每个http响应数据的头信息和正文数据的长度。注意这里不包括http请求数据的长度,所以Total
transferred代表了从Web服务器流向用户PC的应用层数据总长度。通过使用ab的-v参数即可查看详细的http头信息。

HTML transferred
表示所有请求的响应数据中正文数据的总和,也就是减去了Total transferred中http响应数据中头信息的长度。

Requests per second
这便是我们重点关注的吞吐率,它等于:
Complete requests / Time taken for tests

Time per request
这便是前面提到的用户平均请求等待时间,它等于:
Time taken for tests / (Complete requests /Concurrency Level)

Time per request?(across all concurrent requests)
这便是前面提到的服务器平均请求处理时间,它等于:
Time taken for tests / Complete requests

这正是吞吐率的倒数。同时,它也等于:
Time per request / Concurrency Level

Transfer rate
表示这些请求在单位时间内从服务器获取的数据长度,它等于:
Total transferred / Time taken for tests
这个统计项可以很好的说明服务器在处理能力达到限制时,其出口带宽的需求量。
利用前面介绍的有关带宽的知识,不难计算出结果。

Percentage of the requests served within a certain time(ms)
这部分数据用于描述每个请求处理时间的分布情况,比如在以上测试结果中,80%请求的处理时间都不超过1ms,而99%的请求都不超过2ms。注意这里的处理时间,是指前面的Time per request,即对于单个用户而言,平均每个请求处理的时间。

继续压力测试
下面,我们再来进行一次压力测试,此时并发用户数为100,其他条件不变,测试结果如下所示:

[[email protected] ~]# /usr/local/apache/bin/ab -n1000 -c100 http://localhost/index.htmlThis is ApacheBench,Version2.3<$Revision:655654 $>Copyright1996AdamTwiss,ZeusTechnologyLtd, http://www.zeustech.net/Licensed to TheApacheSoftwareFoundation, http://www.apache.org/Benchmarking localhost (be patient)Completed100 requests
Completed200 requests
Completed300 requests
Completed400 requests
Completed500 requests
Completed600 requests
Completed700 requests
Completed800 requests
Completed900 requests
Completed1000 requests
Finished1000 requests

ServerSoftware:Apache/2.2.19ServerHostname:        localhost
ServerPort:80DocumentPath:/index.html
DocumentLength:45 bytes

ConcurrencyLevel:100Time taken for tests:0.369 seconds
Complete requests:1000Failed requests:0Write errors:0Total transferred:283648 bytes
HTML transferred:46080 bytes
Requests per second:2711.45[#/sec] (mean)Time per request:36.881[ms](mean)Time per request:0.369[ms](mean, across all concurrent requests)Transfer rate:751.07[Kbytes/sec] received

ConnectionTimes(ms)
              min  mean[+/-sd] median   max
Connect:0123.41219Processing:112318.917122Waiting:61918.313114Total:203517.130128Percentage of the requests served within a certain time (ms)50%3066%3275%3480%3590%5395%7598%9999%114100%128(longest request)

和前一次的测试结果相比,可以看出,当并发用户数据从原来的10变为100后,吞吐率从原来的2204.64增长到了2711.45,服务器平均请求处理
时间从原来的0.454ms降到了0.369ms,而用户评价请求等待时间从原来的4.536ms增加到了36.881ms.
可见,随着并发用户数的变化,吞吐率、用户平均请求等待时间、服务器配件请求处理时间都发生了相应的变化。

Completed1000 requests
Finished1000 requests

ServerSoftware:Apache/2.2.19ServerHostname:        localhost
ServerPort:80DocumentPath:/index.html
DocumentLength:45 bytes

ConcurrencyLevel:100Time taken for tests:0.369 seconds
Complete requests:1000Failed requests:0Write errors:0Total transferred:283648 bytes
HTML transferred:46080 bytes
Requests per second:2711.45[#/sec] (mean)Time per request:36.881[ms](mean)Time per request:0.369[ms](mean, across all concurrent requests)Transfer rate:751.07[Kbytes/sec] received

ConnectionTimes(ms)
              min  mean[+/-sd] median   max
Connect:0123.41219Processing:112318.917122Waiting:61918.313114Total:203517.130128Percentage of the requests served within a certain time (ms)50%3066%3275%3480%3590%5395%7598%9999%114100%128(longest request)

和前一次的测试结果相比,可以看出,当并发用户数据从原来的10变为100后,吞吐率从原来的2204.64增长到了2711.45,服务器平均请求处理
时间从原来的0.454ms降到了0.369ms,而用户评价请求等待时间从原来的4.536ms增加到了36.881ms.
可见,随着并发用户数的变化,吞吐率、用户平均请求等待时间、服务器配件请求处理时间都发生了相应的变化。

时间: 2024-10-14 00:50:12

ab参数详解 – 压力测试的相关文章

ASP.NET性能监视参数详解

性能监视器- Performance Monitor 性能监视器是Windows自带的系统资源和性能监视工具. 性能监视器能够量化地提供CPU使用率, 内存分配状况, 异常派发情况, 线程调度频率等信息. ASP.NET能够提供每秒钟的请求数目, 请求响应时间等等. 性能监视器能够监视一段时间内上述资源的利用情况, 提供平均值和峰值. 性能监视器有助于获取关于性能的具体指标, 监视问题出现时系统资源的变化情况. 通过检查性能监视器中一些重要计数器的变化情况, 往往能够找到一些比较有用的线索. 比

ffmpeg参数详解

a) 通用选项 -L license -h 帮助 -fromats 显示可用的格式,编解码的,协议的... -f fmt 强迫采用格式fmt,如image2.gif -i filename 输入文件 -y 覆盖输出文件 -t duration 设置纪录时间 hh:mm:ss[.xxx]格式的记录时间也支持 -ss position 搜索到指定的时间 [-]hh:mm:ss[.xxx]的格式也支持 -title string 设置标题 -author string 设置作者 -copyright

Linux系统IO分析工具之iotop参数详解(查看IO占用)

这篇文章主要介绍了Linux系统IO分析工具之iotop参数详解(查看IO占用),本文着重注解了iotop工具的参数,以及可操作命令,需要的朋友可以参考下 简介: iotop – simple top-like I/O monitoriotop是一个用来监视磁盘I/O使用状况的 top 类工具,可监测到哪一个程序使用的磁盘IO的信息(requires 2.6.20 or later) 安装: 复制代码 代码如下: yum -y install iotop 用法: 复制代码 代码如下: iotop

【转】FFMPEG使用参数详解

目前又开始测MPEG1和MPEG2的解码,在准备编码好的测试序列过程中,需要通过编码器来进行原始视频序列的编码操作,以生成我们需要的测试数据.由于IPP example提供的Encoder不支持MPEG1,经过查询,决定MPEG1的编码使用FFMPEG.FFMEPG是个啥子东西呢,这里简单说一下:FFmpeg是用于录制.转换和流化音频和视频的完整解决方案,一套领先的音/视频编解码类库. FFmpeg的官方网址是 http://ffmpeg.mplayerhq.hu/ . 中文Wiki是 http

Nginx内置变量以及日志格式变量参数详解

Nginx内置变量以及日志格式变量参数详解 $args #请求中的参数值 $query_string #同 $args $arg_NAME #GET请求中NAME的值 $is_args #如果请求中有参数,值为"?",否则为空字符串 $uri #请求中的当前URI(不带请求参数,参数位于$args),可以不同于浏览器传递的$request_uri的值,它可以通过内部重定向,或者使用index指令进行修改,$uri不包含主机名,如"/foo/bar.html". $d

LINUX下ORACLE相关的内核参数详解

ORACLE相关的内核参数详解 1.kernel.sem [[email protected] ~]# cat /proc/sys/kernel/sem 250         32000    100         142 [[email protected] ~]#  ipcs -sl ------ Semaphore Limits -------- max number of arrays = 142 max semaphores per array = 250 max semaphor

PHP-FPM参数详解

约定几个目录 /usr/local/php/sbin/php-fpm/usr/local/php/etc/php-fpm.conf/usr/local/php/etc/php.ini一,php-fpm的启动参数 复制代码代码如下: #测试php-fpm配置/usr/local/php/sbin/php-fpm -t/usr/local/php/sbin/php-fpm -c /usr/local/php/etc/php.ini -y/usr/local/php/etc/php-fpm.conf

Redis配置文件redis.conf参数详解

redis.conf配置文件参数详解 # Redis configuration file example. ########################################## GENERAL ######################################## daemonize yes    #是否开启在后台运行redis,默认为no,不开启 pidfile /var/run/redis/redis.pid    #redis在后台运行时,默认pid文件的存放路

GCC参数详解

[介绍] gcc and g++分别是gnu的c & c++编译器 gcc/g++在执行编译工作的时候,总共需要4步 1.预处理,生成.i的文件 2.将预处理后的文件不转换成汇编语言,生成文件.s 3.有汇编变为目标代码(机器代码)生成.o的文件 4.连接目标代码,生成可执行程序 [参数详解] -x language filename 设定文件所使用的语言,使后缀名无效,对以后的多个有效.也就是根据约定C语言的后缀名称是.c的,而C++的后缀名是.C或者.cpp. 可以使用的参数有下面的这些: