探讨ab工具进行web网站压力测试的方法

发布时间:2020-10-02编辑:脚本学堂
本文介绍下,apache自带的压力测试工具ab的具体用法,有需要的朋友参考下。

ab作为apache自带的一款压力测试工具,功能还是不错的。
安装完apache后它就会存在了,在centos中,ab一般在/usr/bin目录中。

ab使用方法,比如:
 

复制代码 代码示例:
ab -c 20 -n 1000 http://www.jb200.com/

-c:并发数
-n:总请求数

有关ab是如何分配并发和请求数的源码分析,初学的朋友,可以略过这段。

在test函数中,先给连接数和请求数分配内存,组http报文头、组http请求报文默认使用GET方法(最大2048个字节)
进入for循环:
 

复制代码 代码示例:
for (i = 0; i < concurrency; i++) {
con[i].socknum = i;
start_connect(&con[i]);
}
 

start_connect函数里,concurrency有几个并发,就创建几个socket连接
apr_socket_create
设置TCP窗口大小
apr_socket_connect
started++ 打开的并发数加加
进入write_request函数
apr_socket_send 把request里的内容通过socket发过去最大2048个字节 发送数据是一个字节一个字节发的吗?
一个并发创建完成及一次请求发送后,出上一个for循环进入一个do while循环
这个do while循环里面又有一个for循环
for (i = 0; i < n; i++) n为并发数
进入read_connection函数
apr_socket_recv
进入close_connection函数
统计一些成功失败数量 平均时间,到一定数量会显示”Completed XXXX requests”
apr_socket_close
然后connect again,再次调用start_connect函数创建socket连接,再write_request,循环n次
然后return
========
假设c为并发数,n为总请求数,done为已完成数。
从这里可以看出ab的运作方式是创建c个并发,同时发送c个请求,然后关闭socket连接,如果done小于n,则继续创建c个并发,同时发送c个请求,然后关闭socket连接,一直
循环,直到done等于n时退出。

3、ab运行完成后会有比较详细的结果
 

Server Software: web服务器软件及版本
Server hostname: 请求的地址
Server Port: 请求的端口

Document Path: 请求的页面路径
Document Length: 页面大小

Concurrency Level: 并发数
Time taken for tests: 测试总共花费的时间
Complete requests: 完成的请求数
Failed requests: 失败的请求数
Write errors: 写入错误
Total transferred: 总共传输字节数,包含http的头信息等
HTML transferred: html字节数,实际的页面传递字节数
Requests per second: 每秒处理的请求数,服务器的吞吐量(重要)
Time per request: 平均数,用户平均请求等待时间
Time per request: 服务器平均处理时间
Transfer rate: 平均传输速率(每秒收到的速率)

4、注意事项
1)
ab并发数不能大于请求数,会提示
ab: Cannot use concurrency level greater than total number of requests

2)
请求数默认不能超过1024个,会提示
socket: Too many open files (24)
可用ulimit -n命令修改,例如:ulimit -n 8192 (设置用户可以同时打开的最大文件数)。

3)
并发数默认不能大于20000个,会提示
ab: Invalid Concurrency [Range 0..20000]
需要修改apache源代码support目录下ab.c文件,找到:
#define MAX_CONCURRENCY 20000
将宏定义的值改大,重新编译安装apache。

4)
提示
apr_socket_recv: Connection reset by peer (104)
网上说是apr-util有些问题,不太稳定,多试几次就好了。

5)
还有单独的apache bench源码包,及如何单独安装ab教程
下载:http://apachebench-standalone.googlecode.com/files/ab-standalone-0.1.tar.bz2
安装教程:https://code.google.com/p/apachebench-standalone/wiki/HowToBuild