本文目录导读:

我来详细说明 Apache Benchmark (ab) 的使用方法。
基本安装
Ubuntu/Debian
sudo apt-get install apache2-utils
CentOS/RHEL
sudo yum install httpd-tools
macOS
# 自带,或通过brew安装 brew install apr-util
基本用法
最基础命令
ab -n 1000 -c 10 http://example.com/
-n 1000:总请求数1000个-c 10:并发数为10
常用参数详解
# 常用参数组合 ab -n 10000 -c 100 -k -H "Authorization: Bearer token123" http://example.com/api # 带POST请求 ab -n 1000 -c 10 -p post_data.txt -T "application/json" http://example.com/api
关键参数说明
| 参数 | 说明 |
|---|---|
-n |
总请求数 |
-c |
并发数 |
-k |
启用HTTP KeepAlive |
-H |
添加自定义Header |
-p |
POST请求数据文件 |
-T |
Content-Type |
-t |
测试持续时间(秒) |
-s |
超时时间(秒) |
-r |
不退出socket接收错误 |
实际测试示例
简单的URL测试
ab -n 1000 -c 10 http://localhost:3000/
带Session的测试
ab -n 5000 -c 50 -k \ -H "Cookie: sessionid=abc123" \ -H "User-Agent: MyBench/1.0" \ http://example.com/login
POST请求测试
# 先创建post_data.txt文件
echo '{"username":"test","password":"123"}' > post_data.txt
# 执行测试
ab -n 1000 -c 20 -p post_data.txt -T "application/json" http://example.com/api/login
持续时间测试
ab -t 60 -c 50 -k http://example.com/
输出结果解读
Server Software: Nginx/1.18.0
Server Hostname: example.com
Server Port: 443
SSL/TLS Protocol: TLSv1.2
Document Path: /
Document Length: 12345 bytes
Concurrency Level: 10 # 并发数
Time taken for tests: 5.234 seconds # 总耗时
Complete requests: 1000 # 完成请求数
Failed requests: 0 # 失败请求数
Total transferred: 12500000 bytes # 总传输数据
HTML transferred: 12345000 bytes # HTML内容传输
Requests per second: 191.06 [#/sec] # 每秒请求数(重要)
Time per request: 52.340 [ms] # 每个请求平均时间(重要)
Time per request: 5.234 [ms] # 每个请求平均时间(所有并发)
Transfer rate: 2331.23 [Kbytes/sec] # 传输速率
Connection Times (ms)
min mean[+/-sd] median max
Connect: 5 8 2.3 7 25
Processing: 20 35 8.4 32 89
Waiting: 18 32 7.6 30 82
Total: 25 43 9.2 39 102
Percentage of the requests served within a certain time (ms)
50% 39 # 50%请求在39ms内完成
66% 45
75% 48
80% 50
90% 56
95% 62
98% 75
99% 85
100% 102 # 最长请求时间
高级使用技巧
多线程测试
# 同时测试多个端点 for i in 1 2 3; do ab -n 1000 -c 10 http://example.com/api/endpoint$i & done wait
对比测试脚本
#!/bin/bash
# benchmark.sh
URLS=("http://example.com/api/v1" "http://example.com/api/v2")
CONCURRENCY=(10 50 100)
for url in "${URLS[@]}"; do
for con in "${CONCURRENCY[@]}"; do
echo "Testing: $url with concurrency $con"
ab -n 1000 -c $con -k $url | grep "Requests per second\|Time per request\|Failed requests"
echo "-----------------------------------"
done
done
测试JSON API
# 带认证头的POST测试
echo '{"action":"search","query":"test"}' > search.json
ab -n 500 -c 10 \
-p search.json \
-T "application/json" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Accept: application/json" \
http://example.com/api/search
注意事项
安全性
- 不要在生产环境执行压力测试
- 使用限制并发数 (一般不超过100)
- 测试前告知相关人员
局限性
- 单线程工具,不适合超级高并发
- 不支持分布式测试
- 不支持动态参数化请求
最佳实践
# 先小规模测试 ab -n 100 -c 5 http://example.com/ # 逐渐增加负载 ab -n 1000 -c 10 http://example.com/ ab -n 5000 -c 50 http://example.com/ ab -n 10000 -c 100 http://example.com/ # 多次测试取平均值 for i in 1 2 3; do ab -n 1000 -c 10 http://example.com/ | grep "Requests per second" done
替代工具推荐
如果ab无法满足需求,可以考虑:
- wrk:更现代、性能更好
- siege:支持更多测试模式
- JMeter:图形化界面,功能全面
- locustio:Python编写,支持分布式
- k6:现代、可编程的压力测试工具
常见问题解决
报错:apr_socket_recv: Connection reset by peer
# 增加超时时间 ab -n 1000 -c 10 -s 30 http://example.com/
报错:Too many open files
# 增加系统文件描述符限制 ulimit -n 65535
能帮助您更好地使用Apache Benchmark进行性能测试!
标签: Apache基准测试
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。