AB的简介

  ab是apachebench命令的缩写。

  ab是apache自带的压力测试工具。ab非常实用,它不仅可以对apache服务器进行网站访问压力测试,也可以对其它类型的服务器进行压力测试,比如nginx、tomcat、IIS等。

ab的原理

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

  ab命令对发出负载的计算机要求很低,它既不会占用很高CPU,也不会占用很多内存。但却会给目标服务器造成巨大的负载,其原理类似CC攻击。自己测试使用也需要注意,否则一次上太多的负载可能造成目标服务器资源耗完,严重时甚至导致死机。

ab的安装

  在CentOS/RHEL系统上安装:yum -y install httpd-tools
  在Ubuntu/Debian系统上安装:apt-get install apache2-utils

ab的常用参数
参数 说明
-n 在测试会话中所执行的请求个数(总数)
-c 一次产生的请求个数(并发数)
-t 测试所持续的时间(秒)
-k 启用HTTP KeepAlive功能
-H 添加自定义HTTP头
-p 包含POST数据的文件
-T POST数据的Content-Type
-v 详细模式级别
ab的使用示例

  基本用法:ab -c 500 -n 5000 http://localhost/

  设置测试时间:ab -c 100 -t 60 http://localhost/

  启用KeepAlive:ab -c 100 -n 10000 -k http://localhost/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
[root@H__D /]# ab -c 500 -n 5000 http://localhost/
This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 500 requests
Completed 1000 requests
Completed 1500 requests
Completed 2000 requests
Completed 2500 requests
Completed 3000 requests
Completed 3500 requests
Completed 4000 requests
Completed 4500 requests
Completed 5000 requests
Finished 5000 requests


Server Software: nginx/1.15.3 #测试服务器的名字
Server Hostname: localhost #请求的URL主机名
Server Port: 80 #请求端口

Document Path: / #请求路径
Document Length: 613 bytes #HTTP响应数据的正文长度

Concurrency Level: 500 #并发用户数,这是我们设置的参数之一
Time taken for tests: 0.407 seconds #所有这些请求被处理完成所花费的总时间 单位秒
Complete requests: 5000 #总请求数量,这是我们设置的参数之一
Failed requests: 0 #表示失败的请求数量
Write errors: 0
Total transferred: 4230000 bytes #所有请求的响应数据长度总和。包括每个HTTP响应数据的头信息和正文数据的长度
HTML transferred: 3065000 bytes #所有请求的响应数据中正文数据的总和,也就是减去了Total transferred中HTTP响应数据中的头信息的长度
Requests per second: 12284.44 [#/sec] (mean) #吞吐量,计算公式:Complete requests/Time taken for tests 总请求数/处理完成这些请求数所花费的时间
Time per request: 40.702 [ms] (mean) #用户平均请求等待时间,计算公式:Time token for tests/(Complete requests/Concurrency Level)。处理完成所有请求数所花费的时间/(总请求数/并发用户数)
Time per request: 0.081 [ms] (mean, across all concurrent requests) #服务器平均请求等待时间,计算公式:Time taken for tests/Complete requests,正好是吞吐率的倒数。也可以这么统计:Time per request/Concurrency Level
Transfer rate: 10149.06 [Kbytes/sec] received #表示这些请求在单位时间内从服务器获取的数据长度,计算公式:Total transferred/ Time taken for tests,这个统计很好的说明服务器的处理能力达到极限时,其出口宽带的需求量。

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 2 0.8 1 6
Processing: 3 5 7.9 5 399
Waiting: 0 4 7.9 4 399
Total: 4 7 8.0 7 404
WARNING: The median and mean for the initial connection time are not within a normal deviation
These results are probably not that reliable.

Percentage of the requests served within a certain time (ms)
50% 7 #50%用户请求在7ms内返回
66% 7 #66%用户请求在7ms内返回
75% 7 #75%用户请求在7ms内返回
80% 7 #80%用户请求在7ms内返回
90% 7 #90%用户请求在7ms内返回
95% 7 #95%用户请求在7ms内返回
98% 12 #98%用户请求在12ms内返回
99% 12 #99%用户请求在12ms内返回
100% 404 (longest request) #100%用户请求在404ms内返回
测试结果分析
  1. 吞吐量(Requests per second):这是最重要的性能指标,表示服务器每秒能够处理的请求数,数值越大越好。

  2. 用户平均请求等待时间(Time per request):表示用户从发送请求到收到响应的平均时间,数值越小越好。

  3. 服务器平均请求处理时间(Time per request, across all concurrent requests):表示服务器处理每个请求的平均时间,数值越小越好。

  4. 连接时间分布:展示了连接建立、处理和等待的时间分布,可以帮助分析性能瓶颈。

  5. 请求完成时间分布:展示了不同百分比的请求完成时间,可以了解系统的稳定性和响应时间分布。

测试注意事项
  1. 测试环境:应在与生产环境相似的环境中进行测试,避免网络、硬件等因素影响测试结果。

  2. 并发数选择:应根据服务器配置和预期负载选择合适的并发数,避免一次施加过大负载导致服务器崩溃。

  3. 测试时间:测试时间应足够长,以获得稳定的测试结果,一般建议至少测试30秒。

  4. 多次测试:应进行多次测试,取平均值以获得更准确的结果。

  5. 监控资源:测试过程中应监控服务器的CPU、内存、网络等资源使用情况,以了解性能瓶颈。

与其他压力测试工具对比
工具 优点 缺点
ab 简单易用,内置在Apache中,轻量级 功能相对简单,不支持复杂场景
JMeter 功能强大,支持复杂场景,可视化界面 资源消耗较大,配置复杂
wrk 高性能,支持Lua脚本,适合长时间测试 学习曲线较陡
siege 支持URL列表,模拟真实用户行为 功能相对简单
参考