1. 什么是ab

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

2. 基本使用

不管是linux还是windows使用方法都差不多,简单粗暴,如下两条:

  1. 首先进入Apache的bin目录,然后命令行操作
  2. 命令行执行;例如:ab -n 100 -c 100 http://127.0.0.1/
    常用参数:“-n” 数值:总请求数。“-c” 数值:并发用户数。

注:url必须在后方加上“/”,或指定相应文件,否则报错。更多参数查看ab工具文档: http://httpd.apache.org/docs/

3. 测试报告

执行完命令后,如果测试完成,会有一些这样的信息:

大概的什么意思已经标明,在实际测试中会经常关注的指标有三个:

  • Requests per second
    平均每秒请求数,即吞吐率;指的是某个并发用户数下单位时间内处理的请求数。某个并发用户数下单位时间内能处理的最大请求数,称之为最大吞吐率。

    计算公式:总请求数 / 处理完成这些请求数所花费的时间,即:
    Request per second = Complete requests / Time taken for tests

  • Time per request
    每次并发请求平均耗时,即用户平均请求等待时间

    计算公式:处理完成所有请求数所花费的时间/ (总请求数 / 并发用户数),即:
    Time per request = Time taken for tests /( Complete requests / Concurrency Level)

  • Time per request(across all concurrent requests)
    平均每个请求的耗时,即服务器平均请求等待时间

    计算公式:处理完成所有请求数所花费的时间 / 总请求数,即:
    Time per request(across all concurrent requests)= Time taken for tests / Complete requests
    可以看到,它是吞吐率的倒数;同时,它也=用户平均请求等待时间/并发用户数,即:Time per request / Concurrency Level

4. 常见问题

4.1 登录问题

进行压力测试时URL需要登录时请求无法成功,怎么办?可以:

  1. 先用账户和密码登录
  2. 用开发者工具找到标识这个会话的Cookie值(Session ID)记下来
  3. 执行命令:
    一个Cookie情况时:ab -n 100 -C key=value http://test.com/
    多个Cookie情况时,设置Header:ab -n 100 -H “Cookie: Key1=Value1; Key2=Value2” http://test.com/

4.2 报错:“apr_pollset_poll:The timeout specified has expired (70007)”

原因是响应超负荷了,从两个点解决:

  1. 一个是查看请求的url是否正常,还有是看看是否服务器已经扛不住这个测试;
  2. 加-k参数可以直接杀死卡住的进程以不报错