当前位置: 首页 > news >正文

压力测试Apache Bench(ab)

文章目录

  • 简介
  • 安装
    • Linux
    • MacOS
    • Windows
  • 基础服务
  • 核心参数
  • 结果解析
  • ​​高频基础接口​​
  • 阶梯加压测试
  • 一些概念
  • 参考文献

简介

Apache Bench (ab) 是 Apache HTTP 服务器自带的一款轻量级压力测试工具,专门用于评估 Web 服务器的性能表现




安装

Linux

# Debian/Ubuntu
sudo apt-get install apache2-utils# CentOS/RHEL
sudo yum install httpd-tools

MacOS

brew install apache-httpd

Windows

  1. 下载 Apache HTTP Server
  2. 解压到 C:\ 并重命名为 httpd
  3. 添加到环境变量 Path:C:\httpd\Apache24\bin




基础服务

app.py

import time
import randomfrom flask import Flask, jsonify, requestapp = Flask(__name__)@app.route('/api/hello')
def hello():"""基础GET测试端点"""return jsonify({"message": "Hello, AB Tester!"})@app.route('/api/random_delay')
def random_delay():"""可变延迟GET测试(模拟IO操作)"""delay = random.uniform(0.1, 0.5)  # 100-500ms随机延迟time.sleep(delay)return jsonify({"delay_seconds": delay})@app.route('/api/compute')
def compute():"""计算密集型端点"""start = time.time()def fib(n):"""斐波那契数列"""if n <= 1:return nreturn fib(n - 1) + fib(n - 2)result = fib(30)elapsed = time.time() - startreturn jsonify({"result": result, "compute_time": elapsed})@app.route('/api/echo', methods=['POST'])
def echo():"""带参数的POST测试"""data = request.jsonreturn jsonify({"received": data})@app.route('/api/db_query')
def db_query():"""数据库模拟测试"""time.sleep(0.2)  # 200ms固定延迟users = [{"id": i, "name": f"user_{i}"}for i in range(5)]return jsonify({"users": users})if __name__ == '__main__':app.run(threaded=True, port=5000)

启动

python app.py# Linux下运行
pip install gunicorn
gunicorn -w 4 -b 127.0.0.1:5000 app:app

测试

ab -n 1000 -c 100 http://127.0.0.1:5000/api/hello
ab -n 1000 -c 100 -l http://127.0.0.1:5000/api/random_delay
ab -n 1000 -c 100 -l http://127.0.0.1:5000/api/compute
echo '{"test": "data"}' > post_data.json
ab -n 1000 -c 100 -p post_data.json -T 'application/json' -l http://127.0.0.1:5000/api/echo
ab -n 1000 -c 100 -l http://127.0.0.1:5000/api/db_query




核心参数

参数说明示例
-n总请求数1000
-c并发用户数100
-t测试执行最大秒数60,默认为50000
-s超时时间默认30秒
-pPOST数据文件data.json
-TContent-Typeapplication/json
-H添加请求头“Authorization: Bearer token”
-k启用HTTP KeepAlive
-v详细模式4(显示响应头)
-q超过150个请求后不显示进度
-l接受可变文档长度(用于动态页面)




结果解析

$ ab -n 1000 -c 100 http://127.0.0.1:5000/api/helloConcurrency Level:      100  # 并发用户数
Time taken for tests:   0.538 seconds  # 测试用时
Complete requests:      1000  # 成功请求数
Failed requests:        0  # 失败请求数
Total transferred:      197000 bytes  # 总数据传输量
HTML transferred:       32000 bytes  # 有效内容数据量
Requests per second:    1859.24 [#/sec] (mean)  # 每秒请求数(QPS),静态资源(≥3000),动态API(500-2000),计算密集型(50-500)
Time per request:       53.785 [ms] (mean)  # 单个请求平均耗时,简单API(<100ms),数据库查询(100-500ms),复杂计算(>500ms)
Time per request:       0.538 [ms] (mean, across all concurrent requests)  # 总请求/总请求数,代表服务器真实处理能力
Transfer rate:          357.69 [Kbytes/sec] received  # 网络吞吐量Connection Times (ms)  # 连接各阶段耗时分布min  mean[+/-sd] median   max
Connect:        0    0   0.3      0       2
Processing:    20   50   8.1     48      64
Waiting:        3   31   6.9     32      46
Total:         20   50   8.1     48      64Percentage of the requests served within a certain time (ms)50%     4566%     4575%     4680%     4690%     4795%     4898%     4999%     56100%     64 (longest request)

指标表述:在100并发用户的条件下,QPS为1859次/秒,请求成功率为100%,平均响应时间为53.785ms,99%的请求响应时间为56ms

能力表述:在P99延迟<56ms且错误率<0.1%的前提下,系统可支持100并发用户




​​高频基础接口​​

接口类型测试重点示例命令
用户认证接口令牌生成/验证性能ab -n 5000 -c 100 /api/login
首页/核心数据接口缓存效率和高并发承载能力ab -k -n 10000 -c 500 /api/home
健康检查接口基础QPS基准ab -n 3000 -c 50 /health




阶梯加压测试

stress_test.sh

#!/bin/bash
api="http://127.0.0.1:5000/api/hello"
concurrencies=(50 100 200 300 500 1000 2000 3000 4000 5000)for c in "${concurrencies[@]}"; doresult=$(ab -n $((c*100)) -c $c -l "$api" 2>&1)if [[ $exit_code -ne 0 ]] || ! echo "$result" | grep -q "Requests per second"; thencompleted=$(echo "$result" | grep "Completed" | tail -1 | awk '{print $2}')if [[ -n "$completed" ]]; thenecho "并发数=${c} 失败 已完成 $completed 次请求"fibreakfiqps=$(echo "$result" | grep "Requests per second" | awk '{print $4}')p99=$(echo "$result" | grep "99%" | awk '{print $2}')echo "并发数=${c} QPS=${qps} P99=${p99}ms"
done

运行

chmod +x stress_test.sh
./stress_test.sh

效果

并发数=50 QPS=24989.63 P99=3ms
并发数=100 QPS=25797.60 P99=6ms
并发数=200 QPS=24481.90 P99=13ms
并发数=300 QPS=24775.94 P99=15ms
并发数=500 QPS=24940.14 P99=26ms
并发数=1000 QPS=24950.46 P99=45ms
并发数=2000 QPS=24372.25 P99=92ms
并发数=3000 QPS=4070.72 P99=7206ms
并发数=4000 失败 已完成 160000 次请求




一些概念

  • ab 检测到响应内容长度不一致会认为失败,可使用 -l 忽略
  • 成功率基准:金融电商行业是99.9%,一般互联网是99%
  • 并发等级:小型内部系统C100(单机),中型企业应用C1000(基础负载均衡),大型互联网服务C10k(分布式架构+缓存),头部平台或基础设施C100k(微服务+自动扩缩容)
  • 验证并发能力:逐步加压
  • 专业表述并发能力:在P99延迟<200ms且错误率<0.1%的前提下,系统可支持​​5000并发用户​​




参考文献

  1. Apache HTTP server benchmarking tool
  2. Apache HTTP 服务器 2.4 文档
  3. Web性能测试工具之ab入门篇
http://www.lryc.cn/news/589833.html

相关文章:

  • Anspire Open暑期上新季 - 第二弹Anspire Browser Agent,开启云端自动化新纪元
  • Go语言自学笔记(2.3-2.6)
  • iOS 性能监控工具全解析 选择合适的调试方案提升 App 性能
  • 【游戏引擎之路】登神长阶(十九):3D物理引擎——岁不寒,无以知松柏;事不难,无以知君子
  • DrissionPage:一款让网页自动化更简单的 Python 库
  • 【BUG】ValueError: Unable to find out axis 2.0 in start_ornt
  • 设计模式之【观察者模式】
  • 单片机(STM32-中断)
  • [2025CVPR-图像检索方向] COBRA:一种用于小样本自适应检索增强模型
  • 实训十一——网络通信原理
  • 震坤行获取商品SKU操作详解
  • LeetCode|Day15|125. 验证回文串|Python刷题笔记
  • C语言基础笔记——位操作
  • 虚幻引擎5 GAS开发俯视角RPG游戏 #06-7:无限游戏效果
  • 使用EF Core修改数据:Update方法与SaveChanges的深度解析
  • 前端性能追踪工具:用户体验的毫秒战争
  • Kiro:亚马逊云发布,革命性AI编程工具!以“规范驱动开发“重塑软件构建范式!
  • es启动问题解决
  • Java数据结构第二十五期:红黑树传奇,当二叉树穿上 “红黑铠甲” 应对失衡挑战
  • 树莓派系统安装
  • GENERALIST REWARD MODELS: FOUND INSIDE LARGELANGUAGE MODELS
  • Java对象的比较
  • 【ArcGISPro】修改conda虚拟安装包路径
  • C++ 计数排序、归并排序、快速排序
  • 图机器学习(10)——监督学习中的图神经网络
  • 【AI智能体】Dify 基于知识库搭建智能客服问答应用详解
  • AdsPower 功能详解 | 应用中心使用指南:插件统一管理更高效、更安全!
  • 医疗AI“全栈原生态“系统设计路径分析
  • Win11专业工作站版安装配置要求
  • 力扣每日一题--2025.7.16