Linux ab 命令
ab (Apache Benchmark) 是 Apache HTTP 服务器自带的一个性能测试工具,用于测量 Web 服务器的性能表现。
ab 命令通过模拟多个并发请求来测试服务器的处理能力,是 Web 开发者和系统管理员常用的基准测试工具。
主要特点:
- 简单易用,无需复杂配置
- 可以快速获取服务器的基本性能指标
- 支持 HTTP/HTTPS 协议
- 开源免费,随 Apache 服务器一起提供
安装 ab 命令
大多数 Linux 发行版中,ab 命令包含在 Apache 工具包中:
# Ubuntu/Debian 系统 sudo apt-get install apache2-utils # CentOS/RHEL 系统 sudo yum install httpd-tools # 验证安装 ab -V
基础使用方法
最简单的 ab 命令格式:
ab -n [请求总数] -c [并发数] [测试网址]
示例:对本地开发服务器进行测试
ab -n 100 -c 10 http://localhost:8080/
这个命令会向 http://localhost:8080/
发送 100 个请求,并发数为 10(即同时有 10 个请求在处理)。
常用参数详解
参数 | 说明 | 示例 |
---|---|---|
-n | 总请求数 | -n 1000 |
-c | 并发请求数 | -c 50 |
-t | 测试持续时间(秒) | -t 60 |
-k | 启用 HTTP KeepAlive | -k |
-H | 添加自定义请求头 | -H "Accept-Encoding: gzip" |
-p | POST 数据文件 | -p data.json |
-T | POST/PUT 内容类型 | -T "application/json" |
-v | 详细输出级别 | -v 4 |
测试结果解读
执行测试后,ab 会输出详细的性能报告,主要关注以下指标:
- Requests per second:每秒处理的请求数(QPS),值越高性能越好
- Time per request:单个请求的平均处理时间
- Transfer rate:数据传输速率
- Percentage served:不同响应时间的请求百分比
- Failed requests:失败的请求数量
示例输出分析:
Server Software: nginx/1.18.0 Server Hostname: localhost Server Port: 8080 Document Path: / Document Length: 612 bytes Concurrency Level: 10 Time taken for tests: 0.845 seconds Complete requests: 100 Failed requests: 0 Total transferred: 82400 bytes HTML transferred: 61200 bytes Requests per second: 118.34 [#/sec] (mean) Time per request: 84.502 [ms] (mean) Time per request: 8.450 [ms] (mean, across all concurrent requests) Transfer rate: 95.22 [Kbytes/sec] received
实际应用示例
测试 POST 请求
实例
ab -n 500 -c 20 -p postdata.txt -T "application/json" http://api.example.com/login
postdata.txt
内容:
实例
{
"username": "testuser",
"password": "test123"
}
"username": "testuser",
"password": "test123"
}
测试 HTTPS 网站
实例
ab -n 1000 -c 100 https://www.example.com/
带认证的测试
实例
ab -n 200 -c 10 -A username:password http://secure.example.com/
常见问题解决
问题 1:出现 "apr_socket_recv: Connection reset by peer" 错误
解决:服务器无法处理高并发,尝试:
- 降低并发数 (
-c
) - 增加服务器配置
- 检查服务器错误日志
问题 2:测试结果波动大
解决:
- 延长测试时间 (
-t
) - 确保网络稳定
- 关闭其他占用资源的程序
问题 3:SSL 证书验证失败
解决:添加 -k
参数忽略 SSL 验证(仅测试环境使用)
进阶技巧
1、结合脚本自动化测试:
实例
#!/bin/bash
for i in {1..5}; do
ab -n 1000 -c $((i*20)) http://localhost:8080/ >> results.txt
done
for i in {1..5}; do
ab -n 1000 -c $((i*20)) http://localhost:8080/ >> results.txt
done
2、测试结果可视化:
- 使用 gnuplot 或其他工具绘制性能曲线
- 将多次测试结果导入 Excel 比较
3、与其他工具配合:
- 同时使用 top/vmstat 监控服务器资源
- 结合 JMeter 进行更复杂的场景测试
点我分享笔记