Web性能压力测试工具ApacheBench(ab)使用
网站性能压力测试是性能调优过程中必不可少的一环。只有让服务器处在高压情况下才能真正体现出各种设置所暴露的问题。Apache中有个自带的,名为ab的程序,可以对Apache或其它类型的服务器进行网站访问压力测试。
0x01 ApacheBench原理
ab命令会创建很多的并发访问线程,模拟多个访问者同时对某一URL地址进行访问。 它的测试目标是基于URL的,因此,既可以用来测试Apache的负载压力,也可以测试nginx、lighthttp、tomcat、IIS等其它Web服务器的压力。
ab命令对发出负载的计算机要求很低,既不会占用很高CPU,也不会占用很多内存,但却会给目标服务器造成巨大的负载,其原理类似CC攻击。自己测试使用也须注意,否则一次上太多的负载,可能造成目标服务器因资源耗完,严重时甚至导致死机。
0x02 ApacheBench的安装
由于ab是Apache携带的一个工具,因此需要安装Apache软件.
Windows
可按照该页面完成安装.
Linux
可通过包管理器完成安装,以Fedora为例:
sudo dnf install httpd
# 或者
sudo yum install httpd
Mac OS X
可通过brew完成安装
brew install ab
# 或
brew cask install ab
0x03 ApacheBench参数说明
基本语法格式:
ab [options...] <URL>
参数 | 说明 | 备注 |
---|---|---|
-n | 测试会话中执行的请求个数 | 默认为1 |
-c | 一次产生的并发数量 | 默认为1 |
-t | 测试进行的最大时间 | 默认无时间限制 |
-p | 需要POST的数据文件 | |
-T | POST数据所需的Content-Type头信息 | 例如,-T "application/x-www-form-urlencoded" |
-v | 设置显示信息的详细程度 | |
-w | 以HTML表的格式输出结果 | 默认是一张白色背景的两列宽度的表格 |
-i | 执行HEAD请求,而不是GET | |
-C | Cookie信息 | 例如,-C "c1=1,c2=2,JSESSIONID=FFo56CD16" |
-H | Header信息 | 例如,-H "Accept-Encoding:gzip" |
-k | 使用HTTP KeepAlive特性 | |
…… | 更多参数请参照下图 | 见下图 |
一般的,我们可以发送这样一条请求,开始我们的一段压测:
ab -n 5000 -c 100 http://www.example.com/index.php
0x04 压测执行
根据上面的参数定制压测方案,例如向一个URL以100的并发发送6000个请求:
ab -n 1000 -c 100 http://www.sogou.com/
然后再逐渐增加并发数,可开启多个ab进程.
大致有如下的结果:
0x05 结果分析
运行结果如下:
结果 | 分析 |
---|---|
Concurrency Level: 100 | 测试的并发数 |
Time taken for tests: 9.227 seconds | 整个测试持续的时间 |
Complete requests: 1000 | 完成的请求数量 |
Failed requests: 18 | 失败的请求数量 |
Total transferred: 553536 bytes | 整个过程中的网络传输量 |
HTML transferred: 152768 bytes | 整个过程中的HTML内容传输量 |
Requests per second: 108.38 [#/sec] (mean) | 最重要的指标之一,相当于LR中的每秒事务数,后面括号中的mean表示这是一个平均值 |
Time per request: 922.706 [ms] (mean) | 最重要的指标之二,相当于LR中的平均事务响应时间,后面括号中的mean表示这是一个平均值 |
Time per request: 9.227 [ms] (mean, across all concurrent requests) | 每个连接请求实际运行时间的平均值 |
Transfer rate: 58.58 [Kbytes/sec] received | 平均每秒网络上的流量,可以帮助排除是否存在网络流量过大导致响应时间延长的问题 |