性能·网络 / 命令文档

Apache Bench (ab) 压测工具

$ ab 21 个章节 Linux 命令详解

概述

Linux运维必备的HTTP服务器性能测试工具完整教程

工具简介

Apache Bench (ab) 是Apache HTTP服务器自带的性能测试工具,用于测试HTTP服务器的处理能力。它可以模拟多个并发用户对目标服务器发送请求,是运维工程师进行性能测试的重要工具。

主要功能

模拟并发访问测试

测量服务器响应时间

统计请求成功率

分析服务器吞吐量

压力测试和性能基准

CentOS/RHEL

yum install httpd-tools -y

Ubuntu/Debian

apt-get install apache2-utils -y

验证安装

ab -V

提示:安装完成后,可以通过 ab -h 查看帮助信息

基本语法与参数

ab [options] [http[s]://]hostname[:port]/path
参数说明示例
-n requests总请求数-n 1000
-c concurrency并发数-c 100
-t timelimit测试时间限制(秒)-t 60
-k启用HTTP KeepAlive-k
-H header添加HTTP头-H "Accept-Encoding: gzip"
-p postfilePOST数据文件-p data.txt
-T content-typeContent-Type头-T "application/json"
-g gnuplot-file输出gnuplot格式数据-g result.dat
-e csv-file输出CSV格式结果-e result.csv
-v verbosity详细程度(1-4)-v 2

1. 基本GET请求测试

ab -n 1000 -c 10 http://www.example.com/

2. 启用Keep-Alive测试

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

3. POST请求测试

echo '{"name":"test"}' > data.json
ab -n 100 -c 10 -p data.json -T "application/json" http://api.example.com/users

4. 限时压测

ab -t 60 -c 50 -k http://www.example.com/

5. 添加自定义头部

ab -n 1000 -c 10 -H "User-Agent: MyBot/1.0" -H "Accept: application/json" http://api.example.com/

关键指标说明

Requests per second (RPS):每秒处理的请求数,衡量服务器吞吐量的核心指标
Time per request:每个请求的平均响应时间,包括用户角度和服务器角度两个值
Transfer rate:数据传输率,表示每秒传输的字节数

重要数据项

Complete requests: 成功完成的请求数

Failed requests: 失败的请求数

Longest request: 最长响应时间

Shortest request: 最短响应时间

Connection Times: 连接时间统计

运维使用注意事项

合理设置并发数

并发数不宜过高,建议从小到大逐步增加,避免压垮目标服务器

控制测试时间

长时间压测可能影响生产环境,建议使用-t参数限制测试时间

网络环境考虑

确保测试机与目标服务器网络连接稳定,避免网络因素影响结果

监控系统资源

压测期间监控CPU、内存、磁盘I/O等系统资源使用情况

重要警告 生产环境谨慎使用:高并发压测可能导致服务器崩溃或服务中断 防火墙影响:大量请求可能被防火墙或CDN识别为攻击行为 资源限制:注意操作系统的文件描述符限制,可能需要调整ulimit 目标服务器确认:确保有权限对目标服务器进行压测

增加文件描述符限制

ulimit -n 65535
echo "* soft nofile 65535" >> /etc/security/limits.conf
echo "* hard nofile 65535" >> /etc/security/limits.conf

调整内核参数

echo "net.core.somaxconn = 65535" >> /etc/sysctl.conf
echo "net.ipv4.tcp_max_syn_backlog = 65535" >> /etc/sysctl.conf
sysctl -p

监控脚本示例

#!/bin/bash
# 压测监控脚本
echo "开始压测监控..."
while true; do
    echo "$(date): CPU: $(top -bn1 | grep "Cpu(s)" | awk '{print $2}'), MEM: $(free | grep Mem | awk '{printf "%.1f%%", $3/$2 * 100.0}')"
    sleep 5
done

常见问题与解决方案

socket: Too many open files 解决:增加文件描述符限制 ulimit -n 65535
apr_socket_recv: Connection reset by peer 解决:降低并发数,或检查目标服务器连接限制
Test aborted due to timeout 解决:增加超时时间或检查网络连接

调试技巧

# 增加详细输出
ab -v 2 -n 100 -c 10 http://example.com/

# 保存详细结果
ab -n 1000 -c 10 -g result.dat http://example.com/ > result.txt 2>&1

最佳实践总结

测试前准备

确认测试目标和权限

准备监控工具

设置系统参数优化

准备测试数据

测试过程

从低并发开始测试

逐步增加负载

记录关键指标

监控系统资源

结果分析

关注RPS和响应时间

分析错误率变化

识别性能瓶颈

制定优化方案

记住:ab工具虽然简单易用,但合理使用才能发挥最大价值!
                    在生产环境中使用时,一定要谨慎操作,做好充分的准备和监控。

同分类 · 其他命令文档