Laravel压测用wrk还是ab

wen PHP项目 17

本文目录导读:

Laravel压测用wrk还是ab

  1. 为什么 wrk 比 ab 更适合 Laravel?
  2. 实战建议:如何使用 wrk 压测 Laravel
  3. 什么时候用 ab?
  4. 一个常见的坑

针对 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?

  1. 快速验证ab -n 1 -c 1 http://... 检查接口是否返回 200。
  2. 环境限制:你的服务器只有 Apache 或 ab 工具,没有权限安装 wrk
  3. 测试静态文件ab 对静态资源(图片、纯文本)压测足够,因为瓶颈不在延迟分布,而在最大吞吐量。

一个常见的坑

如果你用 ab 压测 Laravel,可能会发现:

  • QPS 很低(200 QPS)。
  • 服务端 CPU 不高。 这很可能是因为 ab 自身成为了瓶颈,而不是 Laravel。
场景 推荐工具
正式压测(重点看延迟、QPS) wrkwrk2
精确控制请求速率(限流测试) wrk2 (带 -R 参数)
复杂场景模拟 wrk + Lua脚本
快速验证接口是否正常 ab 或 curl
需要图形化报告(如火焰图) 配合 k6vegetalocust 等(不选 ab/wrk 的原因)

压测 Laravel,无脑选 wrk 即可,它更现代、更高效,并且能直接给你最有价值的延迟分布数据,帮你找到 Laravel 的慢 SQL 或 N+1 问题。

抱歉,评论功能暂时关闭!