Linux ab 命令

Linux 命令大全 Linux 命令大全

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 会输出详细的性能报告,主要关注以下指标:

  1. Requests per second:每秒处理的请求数(QPS),值越高性能越好
  2. Time per request:单个请求的平均处理时间
  3. Transfer rate:数据传输速率
  4. Percentage served:不同响应时间的请求百分比
  5. 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"
}

测试 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

2、测试结果可视化

  • 使用 gnuplot 或其他工具绘制性能曲线
  • 将多次测试结果导入 Excel 比较

3、与其他工具配合

  • 同时使用 top/vmstat 监控服务器资源
  • 结合 JMeter 进行更复杂的场景测试

Linux 命令大全 Linux 命令大全