简介

Apache Bench(简称 ab)是 Apache HTTP Server 附带的轻量级命令行工具,用于执行网站或服务器的负载测试。通过模拟多个并发请求,可以快速分析服务器的性能表现,例如响应时间、吞吐量以及并发处理能力。

ApacheBench( ab )工具程式是标准 Apache 网站服务器发布的一部分,跟 Apache 网站服务器一样,也是免费软件,并可以用 Apache许可证 的规范下散布此软件。 

侦测 ApacheBench

ApacheBench 所使用的 User Agent 字串如下:

ApacheBench/MAJV.MINV

其中 MAJV and MINV 分别代表此程式的主要版本编号与次要版本编号,它通常没有被网站纪录分析软件正确的分类,例如说:Webalizer或AWStats,所以若你执行 ApacheBench 可能会影响到你原本分析流量纪录的报表。 

主要功能

并发性能测试: 模拟高并发环境,检测服务器处理能力。
HTTP 请求测试: 支持 GET、HEAD、POST 等 HTTP 方法。
分析输出数据: 包括每秒请求数(QPS)、平均响应时间、传输速率等。
支持 HTTPS 测试: 能对 SSL/TLS 加密的目标发起请求。

适用场景

网站压力测试
RESTful API 性能测试
Web 服务器优化后的性能验证

Apache Bench 的安装

Apache Bench 通常包含在 Apache 工具包中,可以通过安装 Apache 来获取 ab。

sudo apt update
sudo apt install apache2-utils

验证安装

ab -V

输出类似以下内容则表示安装成功

使用

我们先准备一个靶机。我这里就选择使用ubuntu。我们开启Apache服务来进行测试。

-h 显示使用信息(本消息)

ab -h

1. 指定请求次数和并发数

参数:-n (总请求数) 和 -c (并发请求数)

ab -n 1000 -c 50 http://example.com/

解释: 对 http://example.com/ 发起 1000 个请求,同时保持 50 个请求并发。

服务器信息

        服务器软件: Apache/2.4.52
        目标地址: 192.168.174.145,端口 80(HTTP 默认端口)
文档信息

        路径: /
        文档大小: 10671 字节(每次请求返回的内容大小)
整体性能

        测试耗时: 0.429 秒完成所有 1000 个请求。
        平均响应速率: 2331.33 请求/秒,表示服务器每秒处理 2331 个请求。
        单个请求的平均响应时间: 21.447 毫秒(从客户端发起到接收响应)。
        并发情况下的平均响应时间: 0.429 毫秒(所有请求的平均)。
数据传输

        总数据传输量: 10945000 字节(10.9 MB)。
        HTML 数据量: 10671000 字节(10.6 MB)。
        传输速率: 24918.41 Kbytes/sec(24.9 MB/s)。
连接时间

        最小/平均/最大
                连接时间(Connect):0ms 平均,1ms 最大(表示服务器响应迅速)。
                处理时间(Processing):2ms 最小,21ms 平均,32ms 最大。
                总时间(Total):2ms 最小,21ms 平均,32ms 最大。
                等待时间(Waiting): 等待服务器处理的平均时间是 20ms。
        失败请求

                失败请求数: 0,表明服务器稳定且未丢失任何请求。
百分位响应时间

        50%(中位数): 50% 的请求在 21 毫秒内完成。
        90%: 90% 的请求在 24 毫秒内完成。
        100%: 最慢的请求耗时 32 毫秒。

2. 指定请求的最大时间限制

参数:-t

ab -n 1000 -c 50 -t 30 http://example.com/

解释: 对 http://example.com/ 发起请求,但最多持续 30 秒。

可以看到ubuntu正在不断接受大量的发包数据

3. 设置每个响应的超时时间

参数:-s

ab -n 100 -c 10 -s 10 http://example.com/

解释: 每次请求的最大响应时间为 10 秒。

4. 设置 TCP 缓冲区大小

参数:-b

ab -n 100 -c 10 -b 8192 http://example.com/

解释: 使用 8192 字节作为 TCP 缓冲区大小。

5. 绑定到特定的本地 IP 地址

参数:-B

ab -n 100 -c 10 -B 192.168.174.128 http://example.com/

解释: 绑定到本地 IP 地址 192.168.174.128 发起请求。

6. 模拟 POST 请求

参数:-p 和 -T

ab -n 100 -c 10 -p postdata.txt -T "application/x-www-form-urlencoded" http://example.com/api

解释: 向 http://example.com/api 发起 100 个 POST 请求,postdata.txt 文件包含 POST 数据。

7. 模拟 PUT 请求

参数:-u 和 -T

ab -n 50 -c 5 -u putdata.txt -T "application/json" http://example.com/resource

解释: 向 http://example.com/resource 发起 50 个 PUT 请求,putdata.txt 文件包含 PUT 数据。

8. 指定自定义请求头

参数:-H

ab -n 100 -c 10 -H "Authorization: Bearer token123" http://example.com/

解释: 向目标 URL 添加自定义头部 Authorization。

9. 模拟带 Cookie 的请求

参数:-C

ab -n 100 -c 10 -C "sessionid=abcd1234" http://example.com/

解释: 通过 Cookie 携带 sessionid=abcd1234 的请求。

10. 使用 HTTP KeepAlive

参数:-k

ab -n 100 -c 10 -k http://example.com/

解释: 启用 HTTP 的 KeepAlive 功能,复用连接。

11. 只使用 HEAD 请求而非 GET

参数:-i

ab -n 50 -c 5 -i http://example.com/

解释: 使用 HEAD 方法请求 http://example.com/。

12. 输出 HTML 格式的结果

参数:-w

ab -n 100 -c 10 -w http://example.com/

解释: 输出以 HTML 表格格式呈现的结果。

13. 导出结果为 Gnuplot 数据

参数:-g

ab -n 100 -c 10 -g output.gnuplot http://example.com/

解释: 将请求数据导出到 output.gnuplot 文件,以便使用 Gnuplot 绘图。

14. 导出结果为 CSV 文件

参数:-e

ab -n 100 -c 10 -e results.csv http://example.com/

解释: 将百分位统计数据导出到 CSV 文件 results.csv。

15. 忽略响应长度的变化

参数:-l

ab -n 100 -c 10 -l http://example.com/

解释: 接受目标响应的内容长度可以变化,适用于动态页面。

16. 禁用显示百分位表

参数:-d

ab -n 100 -c 10 -d http://example.com/

解释: 不显示响应时间的百分位统计表。

17. 不显示置信区间和警告

参数:-S

ab -n 100 -c 10 -S http://example.com/

解释: 不显示置信区间和任何警告信息。

18. 指定 HTTP 方法

参数:-m

ab -n 50 -c 5 -m DELETE http://example.com/resource

解释: 使用 DELETE 方法请求 http://example.com/resource。

19. 使用代理服务器

参数:-X
ab -n 100 -c 10 -X 127.0.0.1:8080 http://example.com/
解释: 通过代理 127.0.0.1:8080 发起请求。

20. 指定 SSL/TLS 协议

参数:-f

ab -n 100 -c 10 -f TLS1.2 https://example.com/

解释: 强制使用 TLS 1.2 协议请求目标。

21. 指定 SSL/TLS 密码套件

参数:-Z

ab -n 100 -c 10 -Z AES128-GCM-SHA256 https://example.com/

解释: 使用 AES128-GCM-SHA256 密码套件进行 HTTPS 请求。

22. 使用客户端证书

参数:-E

ab -n 100 -c 10 -E client.pem https://example.com/

解释: 使用 client.pem 客户端证书链和私钥请求目标。

23. 禁用 SNI(Server Name Indication)

参数:-I

ab -n 100 -c 10 -I https://example.com/

解释: 禁用 SNI 功能,这对不支持 SNI 的老服务器有用。

24. 以安静模式运行

参数:-q

ab -n 1000 -c 100 -q http://example.com/

解释: 在大量请求时隐藏进度条信息。

总结

如果在非 root 用户环境运行,请确保网络端口和目标 URL 可被访问。不要对非授权的目标服务器执行压力测试,这可能被视为恶意行为。默认情况下,ab 的并发数(-c 参数)受硬件性能和服务器设置影响,建议逐步提高以避免影响生产环境。

ApacheBench 是一款简单、快速且强大的 HTTP 压力测试工具,适用于对 Web 服务器进行基础的性能测试和分析。在实际使用中,ab 可帮助开发者快速定位性能瓶颈,优化服务器配置。然而,对于更复杂的测试场景,可以结合其他工具(如 JMeter、Locust)进行补充。

通过 ab 的测试结果,用户能够直观了解服务器的处理能力和稳定性,从而为业务发展提供可靠的技术支撑。

在此特别强调,本教程仅在合法授权的情况下进行测试和研究,请勿用于其他用途。未经授权使用此类工具可能会侵犯他人隐私,触犯相关法律,任何因此引发的法律或利益纠纷与本人无关。

欢迎各位大佬,小白来找我交流。

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐