本文目录导读:

我来详细说明 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基准测试
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播