一、siege

1. 下载与安装

1
2
3
4
5
6
7
8
9
10
11
# Ubuntu/Debian
sudo apt-get install siege

# CentOS/RHEL
sudo yum install siege

# macOS
brew install siege

# 验证安装
siege --version

2. 核心参数

参数 说明 示例
-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

3. 示例命令

1
2
3
4
5
# 100并发用户,持续30秒压测
siege -c 100 -t 30s http://example.com

# 从文件加载URL列表,50并发用户,每个用户重复20次
siege -c 50 -r 20 -f urls.txt

4. 测试结果解读

1
2
3
4
5
6
7
8
Transactions:              2000 hits        # 总请求数
Availability: 99.50 % # 请求成功率(失败率=1 - Availability)
Elapsed time: 59.99 sec # 总耗时
Data transferred: 5.67 MB # 总数据传输量
Response time: 0.25 sec # 平均响应时间
Transaction rate: 33.34 trans/sec # 每秒处理请求数(QPS)
Longest transaction: 1.20 sec # 最慢请求耗时
Shortest transaction: 0.05 sec # 最快请求耗时

二、ab(ApacheBench)

1. 下载与安装

1
2
3
4
5
6
7
8
9
10
11
# Ubuntu/Debian
sudo apt-get install apache2-utils

# CentOS/RHEL
sudo yum install httpd-tools

# macOS(预装或使用Homebrew)
ab -V

# 验证安装
ab -V

2. 核心参数

参数 说明 示例
-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

3. 示例命令

1
2
3
4
5
# 总请求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

4. 测试结果解读

1
2
3
4
5
6
7
8
9
10
11
12
13
Concurrency Level:      100                 # 并发数
Time taken for tests: 2.123 seconds # 总耗时
Complete requests: 1000 # 成功请求数
Failed requests: 0 # 失败请求数
Requests per second: 470.34 [#/sec] # QPS(每秒请求数)
Time per request: 212.300 [ms] # 平均请求耗时(并发场景)
Time per request: 2.123 [ms] # 平均请求耗时(单用户)
Transfer rate: 512.34 [Kbytes/sec] # 数据传输速率

Percentage of the requests served within a certain time (ms):
50% 25 # 50%的请求在25ms内完成
90% 50 # 90%的请求在50ms内完成
99% 200 # 99%的请求在200ms内完成

三、wrk

1. 下载与安装

1
2
3
4
5
6
7
8
9
# 源码编译(需提前安装Git和GCC)
git clone https://github.com/wg/wrk.git
cd wrk && make

# macOS
brew install wrk

# 验证安装
wrk --version

2. 核心参数

参数 说明 示例
-t <线程数> 工作线程数(建议与CPU核心一致) -t 4
-c <并发数> 并发连接数(必须参数) -c 100
-d <时间> 压测持续时间(s/m/h) -d 30s
-s <脚本> 使用Lua脚本定制请求(如POST) -s post.lua
--latency 输出详细延迟分布统计 --latency
--timeout <时间> 设置请求超时时间 --timeout 10s

3. 示例命令

1
2
3
4
5
# 4线程、100并发、持续30秒压测
wrk -t4 -c100 -d30s http://example.com

# 使用Lua脚本模拟POST请求(见下方脚本示例)
wrk -t4 -c100 -d10s -s post.lua http://example.com/api

Lua脚本示例(post.lua):

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

4. 测试结果解读

1
2
3
4
5
6
7
8
9
10
11
12
13
Running 30s test @ http://example.com
4 threads and 100 connections # 线程数、并发连接数
Thread Stats Avg Stdev Max +/- Stdev
Latency 45.76ms 12.34ms 200.15ms 85.23% # 延迟分布(平均、标准差、最大值、分布比例)
Req/Sec 550.12 120.45 2.34k 75.34% # 每秒请求数分布
Latency Distribution # 延迟百分比分布
50% 42.12ms
75% 50.23ms
90% 65.45ms
99% 185.67ms
65432 requests in 30.01s, 12.34MB read # 总请求数、数据读取量
Requests/sec: 2180.23 # QPS
Transfer/sec: 420.45KB # 每秒数据传输量

四、工具横向对比

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

五、最终建议

  1. 简单快速测试:用 ab,一条命令即可获取QPS和延迟分布。
  2. 高并发/复杂场景:选 wrk,支持Lua脚本模拟动态请求(如登录、鉴权)。
  3. 成功率验证:用 siege,明确展示事务成功率和响应时间极值。
  4. 生产级压测:结合多工具结果交叉验证(如先用 ab 快速验证,再用 wrk 压测极限)。

附:各工具官网