本文目录导读:

针对 Laravel 项目的压测,更推荐使用 wrk,而不是 ab(Apache Bench),以下是详细的原因分析和对比:
wrk:优势巨大,是主流选择,尤其在wrk2版本中,它能提供更精准的延迟分布数据。ab:除非你只是为了测一个“通不通”或环境极度受限(如只装了 Apache),否则不建议用于 Laravel 压测。
为什么 wrk 比 ab 更适合 Laravel?
| 对比维度 | wrk | ab |
|---|---|---|
| 并发模型 | 多线程 + 非阻塞事件驱动,一个线程可以处理大量并发连接,资源开销低。 | 单进程,一个线程对应一个并发连接,高并发下(如数千连接),会触发 fork 出大量进程,远超 wrk 的资源消耗。 |
| 性能瓶颈 | 不会成为测试的瓶颈,它很轻松就能打出几万甚至十几万的 QPS,只要你的 Laravel 能处理。 | 容易成为瓶颈,在高并发场景前,ab 自身 CPU 会先 100%,限制了你测试 Laravel 真实吞吐能力的天花板。 |
| 延迟统计 | 非常强大,能提供延迟标准差、延迟分布(百分位数),且支持 --latency 参数输出详细分布图。 |
非常弱,只给出平均值,看不到 P99、P999 延迟,这对于 Laravel(一个通常有数据库查询、Session 处理的框架)非常重要。 |
| Laravel 特点匹配 | Laravel 启动慢、中间件多、依赖数据库,需要长时间预热和统计。wrk 支持 -d30s 甚至更久的测试,并自动收集延迟分布。 |
ab 默认只跑一次,对于 Laravel 这种慢启动框架,容易测得“启动时间”而非“持续性能”。 |
实战建议:如何使用 wrk 压测 Laravel
安装 wrk
# macOS brew install wrk # Ubuntu/Debian sudo apt-get install build-essential libssl-dev git -y git clone https://github.com/wg/wrk.git wrk cd wrk make sudo cp wrk /usr/local/bin/
基础压测命令(最常用)
wrk -t12 -c400 -d30s --latency http://your-laravel.test/api/test
-t12:使用 12 个线程(建议等于 CPU 核数 * 2)。-c400:保持 400 个并发连接。-d30s:持续压测 30 秒(Laravel 建议至少 30s,避开冷启动)。--latency:输出详细延迟分布(如 P50, P75, P99)。
进阶:使用 Lua 脚本模拟真实用户
Laravel 通常有 Session 或 Token,用 Lua 脚本保持 Cookie:
-- login.lua
wrk.method = "POST"
wrk.body = "email=test@example.com&password=secret"
wrk.headers["Content-Type"] = "application/x-www-form-urlencoded"
response = function(status, headers, body)
if status == 200 then
-- 提取 Set-Cookie 模拟后续请求
wrk.headers["Cookie"] = headers["Set-Cookie"]
end
end
然后运行:
wrk -t4 -c100 -d30s -s login.lua http://your-laravel.test/login
使用 wrk2 获得更精准的延迟
wrk2 可以固定请求速率(RPS),避免测试机自身调度干扰,特别适合测 P99 延迟。
# 安装 wrk2 (基于 wrk 的加强版) git clone https://github.com/giltene/wrk2.git cd wrk2 make sudo cp wrk /usr/local/bin/wrk2 # 固定速率 1000 QPS 测试 wrk2 -t4 -c100 -d30s -R1000 --latency http://your-laravel.test/api
什么时候用 ab?
- 快速验证:
ab -n 1 -c 1 http://...检查接口是否返回 200。 - 环境限制:你的服务器只有 Apache 或
ab工具,没有权限安装wrk。 - 测试静态文件:
ab对静态资源(图片、纯文本)压测足够,因为瓶颈不在延迟分布,而在最大吞吐量。
一个常见的坑
如果你用 ab 压测 Laravel,可能会发现:
- QPS 很低(200 QPS)。
- 服务端 CPU 不高。
这很可能是因为
ab自身成为了瓶颈,而不是 Laravel。
| 场景 | 推荐工具 |
|---|---|
| 正式压测(重点看延迟、QPS) | wrk 或 wrk2 |
| 精确控制请求速率(限流测试) | wrk2 (带 -R 参数) |
| 复杂场景模拟 | wrk + Lua脚本 |
| 快速验证接口是否正常 | ab 或 curl |
| 需要图形化报告(如火焰图) | 配合 k6、vegeta、locust 等(不选 ab/wrk 的原因) |
压测 Laravel,无脑选 wrk 即可,它更现代、更高效,并且能直接给你最有价值的延迟分布数据,帮你找到 Laravel 的慢 SQL 或 N+1 问题。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播