Web 压力测试工具ApacheBench

ab命令会创建很多的并发访问线程,模拟多个访问者同时对某一URL地址进行访问。它的测试目标是基于URL的,因此,既可以用来测试Apache的负载压力,也可以测试nginx、lighthttp、tomcat、IIS等其它Web服务器的压力。 ab命令对发出负载的计算机要求很低,既不会占用很高CPU,也不会占用很多内存,但却会给目标服务器造成巨大的负载,其原理类似CC攻击。自己测试使用也须注意,否则一次上太多的负载,可能造成目标服务器因资源耗完,严重时甚至导致死机。

1,ab运行的时候需要依赖包,我们先安装依赖包,直接yum安装就可以了

yum install apr-util

2, 下载apache的rpm包,分离ab







[root@Tomcat ~] mkdir ab
[root@Tomcat ~] cd ab
[root@Tomcat ab] yum -y install yum-utils
[root@Tomcat ab] yumdownloader httpd  #yumdownloader 需要安装yum-utils才能使用,默认是没有的安装的
[root@Tomcat ab] rpm2cpio httpd-2.2.3-91.el5.centos.i386.rpm |cpio -idmv
[root@Tomcat ab] \cp -pa usr/bin/ab /usr/bin/  #复制到系统PATH就可以使用了



3,ab简单用法

参数很多,一般我们用 -c 和 -n 参数就可以了。

#ab -c 1000 -n 4000 http://www.baidu.com #具体到某页面

-n后面的4000代表总共发出4000个请求;-c后面的1000表示采用1000个并发(模拟1000个人同时访问),后面的网址表示测试的目标URL。


C:\Program Files\Apache Software Foundation\Apache2.2\bin>ab -n 10 -c 10 http

://www.google.com/

This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0

Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/

Copyright 1997-2005 The Apache Software Foundation, http://www.apache.org/

 

Benchmarking www.google.com (be patient).....done

 

 

Server Software:        GWS/2.1

Server Hostname:        www.google.com

Server Port:            80

 

Document Path:          /

Document Length:        230 bytes

 

Concurrency Level:      10

 

Complete requests:      10

 

Failed requests:        0

Write errors:           0

Non-2xx responses:      10

Keep-Alive requests:    10

 

Total transferred:      6020 bytes

 

HTML transferred:       2300 bytes

 

Time per request:       3234.651 [ms] (mean)

 

Time per request:       323.465 [ms] (mean, across all concurrent requests)

 

Transfer rate:          1.55 [Kbytes/sec] received

 

Connection Times (ms)

              min  mean[+/-sd] median   max

Connect:       20  318 926.1     30    2954

Processing:    40 2160 1462.0   3034    3154

Waiting:       40 2160 1462.0   3034    3154

Total:         60 2479 1276.4   3064    3184

 

 

Percentage of the requests served within a certain time (ms)

  50%   3064

  66%   3094

  75%   3124

  80%   3154

  90%   3184

  95%   3184

  98%   3184

  99%   3184

  100%   3184 (longest request)



4其他参数

更多参数:

-A auth-username:password
    有的请求需要用户名和密码进行验证:(例如:401 验证需求).
 
-b windowsize TCP 发送和接收的buffer大小,单位是 bytes
-c concurrency 并发数,同一时间有多少请求发出去,默认是1。
-C cookie-name=value 加上Cookie:以“ name=value ”的形式,可以重复
-C xx1=yy1 -C xx2=yy2。 -d 不展示"percentage served within XX [ms] table".
-e csv-file 写一个逗号分隔的CSV文件,包含每个百分比(from 1% to 100%)服务器执行的时间(毫秒),这个文件一般比'gunplot'有用。
-f protocol 指定 SSL/TLS 协议 (SSL2, SSL3, TLS1, or ALL).
-g gnuplot-file 写所有有用的信息到TSV(Tab separate values)文件,可以轻松导入Excel等里面,label在文件第一行。
-h 展示帮助信息 -H custom-header 加入额外的头信息。以冒号分割,例如("Accept-Encoding: zip/zop;8bit")
-i 发送GET请求 -k 打开Http的keepalive功能。在一个http会话里执行多个请求。默认不开启。
-n requests 要执行的请求校验次数。默认请求一次,请求一次的结果不能代表校验结果,不准确。
-p POST-file 包含POST数据文件
-P proxy-auth-username:password 支持基本Auth代理路由验证。在(http code : 407 的时候需要)
-q 当程序有150个请求,输出以每10%或100个来显示。
-q 用来取消这些信息。
-r 在socket错误的时候不退出。 -s 如果用在SSl协议,功能还处在试验阶段,你不需要用它。
-S 不展示终止和标准值,也不展示警告信息。
-t timelimit 校验花费的最大时间,内部设置-n 50000 次。使用这个选项在特定时间内测试。默认不开启
-T content-type 用于POST/PUT 数据,例如eg. application/x-www-form-urlencoded. Default: text/plain. -u PUT-file PUT 的文件,记着加上-T -v verbosity 设置输出等级, 4 输出头信息,3 输出响应码(404,200) 2 输出警告和信息
-V 展示版本,然后退出。
-w 输出结果到html里的table,默认两列,白色背景。
-x -attributes String to use as attributes for
. Attributes are inserted 
.
-X proxy[:port]
    使用代理。
 -y -attributes 设置属性到 . -z
-attributes 设置属性到. -Z ciphersuite 指定 SSL/TLS 密码套件 (See openssl ciphers).


1. ab输出信息说明:

Server Software: web服务器软件及版本

Server Hostname: 表示请求的URL中的主机部分名称

Server Port: 被测试的Web服务器的监听端口

Document Path: 请求的页面路径

Document Length: 页面大小

Concurrency Level: 并发数

Time taken for tests: 测试总共花费的时间

Complete requests: 完成的请求数

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

Write errors: 写入错误

Total transferred: 总共传输字节数,包含http的头信息等。使用ab的-v参数即可查看详细的http头信息。

HTML transferred: html字节数,实际的页面传递字节数。也就是减去了Total transferred中http响应数据中头信息的长度。

Requests per second: 每秒处理的请求数,服务器的吞吐量,等于:Complete requests / Time taken for tests

Time per request: 平均数,用户平均请求等待时间

Time per request: 服务器平均处理时间

Transfer rate: 平均传输速率(每秒收到的速率)。可以很好的说明服务器在处理能力达到限制时,其出口带宽的需求量。

Connection Times (ms) 压力测试时的连接处理时间。

min mean[+/-sd] median max

Connect: 0 67 398.4 9 3009

Processing: 49 2904 2327.2 2755 12115

Waiting: 48 2539 2075.1 2418 12110

Total: 53 2972 2385.3 2789 12119

2. 测试时出现的Failed requests原因分析:

Failed requests: 2303

(Connect: 0, Length: 2303, Exceptions: 0)

只要出现Failed requests就会多一行数据来统计失败的原因,分别有Connect、Length、Exceptions。

Connect 无法送出要求、目标主机连接失败、要求的过程中被中断。

Length 响应的内容长度不一致 ( 以 Content-Length 头值为判断依据 )。

Exception 发生无法预期的错误。

上图的测试失败请求都落在Length类别上,是因为测试的是PHP动态页面,测试过程中响应的Content-Length大小不一致造成的。有 网友说对于动态页面的Length不一致是合理的,可以不予理会。但是我这测试实例是通过PHP来访问图片的,这个响应的大小应该是固定的吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值