#1 ab 报告解析

2016-01-02

安装

CentOS 下的安装:

sudo yum install -y httpd-utils

Debian/Ubuntu 下的安装:

sudo apt install -y apache2-utils

使用

ab -n 请求数 -c 并发书 URL

常用参数:

  • -n 请求数
  • -c 并发数
  • -t 持续测试时间
  • -k 启用 HTTP KeepAlive
  • -H 设置请求头
  • -m 请求方式
  • -T 设置 Content-Type
  • -p 设置 POST 数据文件

如果 POST 请求:

echo 'key1=value1&key2=value2' > /tmp/postdata
-T 'application/x-www-form-urlencoded' -p postdata

echo '{"key1":"value1","key2":"value2"}' > /tmp/postdata
-T 'application/json' -p postdata

报告解读

执行 ab -n100 -c10 https://www.baidu.com/ 可以得到以下结果:

ab result image

需要重要关注的数据做了标记,分别是:

  • 失败数 Failed requests
    应该尽最大可能保证失败数为 0, 也就是成功数 100%
  • 吞吐量(QPS/TPS) (Requests per second)
  • 平均响应时间 (第一个 Time per request)
    应该等于:测试持续时间 / 请求数
    应该等于:并发数 / 吞吐量
  • 最长响应时间 (最后面那行,100% longest request)
    80%, 90%, 95% 响应时间, 也可作为重要参考。

测试方案

Update @ 2021-12-29

url="https://www.baidu.com/"

rm -rf /tmp/httpbench-*.log
for c in {1,2,3,4,5,6,7,8,9,10,20,30,40,50,60,70,80,90,100,150,200,250,300,350,400,450,500,600,700,800,900,1000};
do echo "==== Concurrency Level: $c ===="; let n=$((c * 100)); ab -n $n -c $c $url > /tmp/httpbench-$c.log; sleep 10; done;

然后用 Python 脚本解析 ab 输出生成报告。

Python 代码就不贴了, 如果感兴趣可以打开看看: abReport.py

如果觉得我的方案不妥当,非常欢迎提出意见或建议。

Update @ 2021-12-30:

又对 abReport.py 做了调整 (abReport2.py),现在可以输出一个 ECharts 图表了(尽整些花里胡哨的东西)。

doge