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

三大压测工具对比:Siege/ab/Wrk实战指南

目录

1. siege

下载与安装

核心参数

示例命令

测试结果解读

2. ab

下载与安装

核心参数

示例命令

测试结果解读

3. wrk(推荐)

下载与安装

核心参数说明

基础压测命令

Lua脚本模板

测试结果解读

4. 工具横向对比


1. siege

下载与安装

# Ubuntu/Debian
sudo apt-get install siege# CentOS/RHEL
sudo yum install siege# macOS
brew install siege# 验证安装
siege --version

核心参数

参数说明示例
-c <并发数>并发用户数(必须参数)-c 100
-t <时间>压测持续时间(s/m/h)-t 30s
-r <次数>每个用户重复请求次数-r 50
-f <文件>从文件读取多个URL进行压测-f urls.txt
-i随机发送文件中的URL请求-i -f urls.txt
-b无延迟模式(最大压力测试)-b
-v显示详细请求日志-v

示例命令

# 100并发用户,持续30秒压测
siege -c 100 -t 30s http://example.com# 从文件加载URL列表,50并发用户,每个用户重复20次
siege -c 50 -r 20 -f urls.txt

测试结果解读

资源消耗最大

测试结果 20w+请求,qps在8612

指标值/状态解读
总请求数256,577压测期间成功处理超25万次请求,吞吐量极高。
请求成功率100%所有请求均成功,无失败(如HTTP 5xx错误),稳定性优秀。
压测时长29.79秒测试窗口合理,结果可信度高。
总数据传输量93.96 MB平均每个请求传输约0.37KB,内容轻量。
平均响应时间0.01秒(10ms)处理速度极快,静态资源或缓存结果。
QPS8,612.86次/秒每秒处理超8.6k请求,吞吐能力极强,适合高并发场景。
网络吞吐量3.15 MB/s带宽消耗低,未成为性能瓶颈。
平均并发连接数97.13接近设置并发用户数(如100),资源充分利用。
成功事务数256,578与总请求数基本一致,统计误差可忽略。
失败事务数0服务端无超时或异常,稳定性极佳。
最长请求耗时0.53秒(530ms)存在个别长尾请求,需排查原因(如慢查询、资源竞争)。
最短请求耗时0秒(接近0ms)部分请求瞬间完成,可能为内存缓存直接响应。

2. ab

下载与安装

# Ubuntu/Debian
sudo apt-get install apache2-utils# CentOS/RHEL
sudo yum install httpd-tools# macOS(预装或使用Homebrew)
ab -V# 验证安装
ab -V

核心参数

参数说明示例
-n <总数>总请求数(必须参数)-n 1000
-c <并发数>并发用户数(必须参数)-c 100
-k启用HTTP Keep-Alive长连接-k
-H <头部>添加自定义HTTP头部-H "Content-Type: application/json"
-p <文件>POST请求时发送的数据文件-p data.json
-T <类型>POST/PUT内容类型-T application/json

示例命令

# 总请求1000次,并发100用户,启用Keep-Alive
ab -n 1000 -c 100 -k http://example.com/# POST请求测试(发送JSON数据)
ab -n 500 -c 50 -T application/json -p data.json http://example.com/api

测试结果解读

资源消耗

测试结果尽量保证请求数量和wrk一致

指标值/状态解读与分析
服务器信息
Server Softwarenginx/1.14.0服务端为 Nginx 1.14.0,需检查是否为最新稳定版本(存在安全或性能优化可能)。
Server Hostnamelocalhost压测目标为本地服务器,排除了网络延迟干扰。
Server Port80HTTP 标准端口,未使用 SSL/TLS(无加密开销)。
Document Path/测试根路径,可能为静态资源或轻量级接口。
Document Length612 bytes单个响应内容约 0.6KB,数据量极小,适合高吞吐场景。
压测参数与结果
Concurrency Level100并发用户数 100,模拟中等并发压力。
Time taken for tests62.288秒总测试时长约 1 分钟,t同样请求数量wrk在30s
Complete requests1,326,711完成请求数超 132 万,负载能力极强。
Failed requests1失败请求 1 次(可能为偶发错误,需检查服务端日志)。
QPS(Requests/sec)21,299.53每秒处理超 2.1 万请求,吞吐量极高
传输数据
Total transferred1,133,011,194 bytes总传输数据约 1.06GB,网络带宽压力较大。
HTML transferred811,947,132 bytes实际内容数据约 775MB,平均每个请求 612字节。
Transfer rate17,763.47 KB/sec网络吞吐量约 138.8Mbps(17,763KB/s × 8),需确保千兆网络无瓶颈。
延迟分析
Time per request (mean)4.695ms单个请求平均耗时 4.7ms(含并发等待时间),处理极快。
Time per request (mean, across)0.047ms单用户视角平均延迟 0.047ms,表明高并发下效率极佳。
连接时间分布(ms)
Connect (min/mean/median/max)0/2/2/16TCP 连接建立时间稳定,网络无拥塞。
Processing (min/mean/median/max)0/3/3/212服务端处理时间波动较大(标准差 2.1ms),存在长尾请求(212ms)。
Waiting (min/mean/median/max)0/3/2/211服务端排队等待时间与处理时间一致,表明无队列堆积。
Total (min/mean/median/max)0/5/4/213总耗时中位数 4ms,但最大延迟 213ms,需排查长尾问题。
延迟百分比分布(ms)
50% (P50)4半数请求在 4ms 内完成。
90% (P90)790% 请求在 7ms 内完成,响应速度极快。
95% (P95)895% 请求在 8ms 内完成。
99% (P99)1399% 请求在 13ms 内完成,长尾控制较好。
100% (Max)213最慢请求耗时 213ms,需检查原因(如慢查询、资源竞争或 GC 停顿)。

3. wrk(推荐)

下载与安装

使用源码编译需要提前安装Git和GCC环境:

git clone https://github.com/wg/wrk.git
cd wrk && make

核心参数说明

参数作用说明使用示例
-t <threads>设置工作线程数-t 4
-c <connections>指定并发连接数-c 100
-d <duration>控制测试持续时间-d 30s
-s <script>加载自定义Lua脚本-s post.lua
--latency显示完整延迟分布--latency
--timeout <time>配置请求超时阈值--timeout 10s

基础压测命令

执行GET请求压力测试:

wrk -t4 -c100 -d30s http://example.com

结合Lua脚本实现POST请求测试:

wrk -t4 -c100 -d10s -s post.lua http://example.com/api

Lua脚本模板

创建post.lua文件实现POST请求:

wrk.method = "POST"
wrk.headers["Content-Type"] = "application/json"
wrk.body = '{"username":"test", "password":"123456"}'

测试结果解读

资源消耗

测试结果

指标解读与分析
线程与连接2线程,100连接使用2个工作线程模拟100并发连接,线程数合理(通常建议等于CPU核心数)。
平均延迟(Latency)3.18ms请求处理速度极快,用户体验优异。
延迟波动(Stdev)±3.79ms延迟标准差较大,部分请求响应时间波动明显(需关注长尾延迟)。
最大延迟(Max)68.57ms存在个别高延迟请求(可能因网络波动、服务端资源争抢或GC导致)。
延迟分布(+/- Stdev)87.63% 请求在±3.79ms内多数请求延迟稳定,但约12.37%的请求超出此范围。
单线程请求速率(Req/Sec)22.19k ±4.57k单线程每秒处理约2.2万次请求,性能强劲,但不同线程负载不均(标准差较高)。
总请求数1,326,711次30秒内完成超130万次请求,总负载能力极强。
总数据读取量1.06GB平均每个请求传输约0.82KB(1.06GB/1,326,711),内容轻量。
QPS(Requests/sec)44,127.78每秒处理超4.4万次请求,吞吐量极高,适合高并发场景。
网络吞吐量(Transfer/sec)36.15MB/s带宽消耗约288Mbps(36.15MB/s × 8),需确保网络无瓶颈。

4. 工具横向对比

维度siegeabwrk
安装复杂度⭐⭐(包管理器直装)⭐⭐⭐(ApacheUtils集成)⭐⭐(需编译或Homebrew)
性能上限⭐⭐(万级QPS)⭐⭐⭐(十万级QPS)⭐⭐⭐⭐(百万级QPS)
灵活性⭐⭐(支持URL列表、随机请求)⭐(仅支持简单静态请求)⭐⭐⭐⭐(Lua脚本扩展动态场景)
结果可读性⭐⭐⭐(清晰的成功率/响应时间)⭐⭐(QPS和延迟分布)⭐⭐⭐(线程级统计+延迟分布)
适用场景页面级压测、成功率监控快速基准测试、简单接口验证高并发测试、复杂业务逻辑模拟
资源消耗高(进程模型)中(单线程+多进程)低(多线程+事件驱动)
http://www.xdnf.cn/news/19014.html

相关文章:

  • SpringBoot系列之实现高效批量写入数据
  • 基础IO详解
  • 【前缀和】
  • Pandas的数据结构
  • 第十七章 Java基础-常用API-System
  • [p2p-Magnet] 数据模型(GORM) | DHT爬虫 | 分类器
  • React Hook+Ts+Antd+SpringBoot实现分片上传(前端)
  • 数据湖与数据仓库
  • Qt 中日志级别
  • ArcGIS+Fragstats:土地利用统计分析、景观格局指数计算与地图制图
  • Android Keystore签名文件详解与安全防护
  • AI视频生成工具全景对比:元宝AI、即梦AI、清影AI和Vidu AI
  • 【贪心 单调栈】P10334 [UESTCPC 2024] 饮料|普及+
  • 工业 5G + AI:智能制造的未来引擎
  • Day16_【机器学习建模流程】
  • 【Rust】 3. 语句与表达式笔记
  • Java HTTP 请求:Unirest 使用指南及与 HttpClient 对比
  • .Net Core Web 架构(Request Pipeline)的底层实现
  • 自己定义的模型如何用hf的from_pretrained
  • Linux(一) | 初识Linux与目录管理基础命令掌握
  • 测试题ansible临时命令模块
  • CuTe C++ 简介01,从示例开始
  • imx6ull-驱动开发篇47——Linux SPI 驱动实验
  • Electron解压缩文件
  • hive on tez为什么写表时,要写临时文件到hdfs目录
  • docker 1分钟 快速搭建 redis 哨兵集群
  • 配置nginx.conf (增加21001端口实例操作)
  • 医疗AI时代的生物医学Go编程:高性能计算与精准医疗的案例分析(三)
  • [灵动微电子 MM32BIN560CN MM32SPIN0280]读懂电机MCU之比较器
  • jQuery 从入门到实践:基础语法、事件与元素操作全解析