PHP压力测试需借助外部工具,Apache Bench(ab)是最轻量的入门选择,支持GET/POST、Header、Keep-Alive等,关键看QPS、平均响应时间、失败请求数及响应时间分布。

PHP本身不提供内置压力测试能力,必须借助外部工具模拟真实并发请求。Apache Bench(ab)是最常用、最轻量的入门选择,适合快速验证单个接口在特定并发下的吞吐与稳定性。
安装与基础命令
ab 通常不依赖 Apache 服务本身,只需安装工具包即可:
- Ubuntu/Debian:sudo apt install apache2-utils
- CentOS/RHEL:sudo yum install httpd-tools 或 dnf install httpd-tools
- macOS(Homebrew):brew install httpd-tools
测试命令示例:
ab -n 1000 -c 50 http://localhost/test.php
其中 -n 1000 表示总请求数,-c 50 表示最大并发用户数(即同时发起 50 个连接)。
关键指标怎么看
执行后输出中需重点关注以下几项:
- Requests per second:每秒处理请求数(QPS),数值越高说明吞吐越强
- Time per request:平均响应时间(单位毫秒),注意区分“mean”和“across all concurrent requests”两行含义
- Failed requests:失败请求数,非零需立即排查(如 502/504 错误常指向 PHP-FPM 队列满或超时)
- Percentage served within XX ms:例如 “90% within 247ms”,反映响应时间分布,比平均值更有业务参考价值
常见场景补充写法
单纯 GET 测试不够贴近真实业务,需按需添加参数:
立即学习“PHP免费学习笔记(深入)”;
- 带 Header(如鉴权):-H "Authorization: Bearer xxxxx"
- POST JSON 请求:-p data.json -T "application/json",data.json 内容为 {"id":123}
- 启用 Keep-Alive 复用连接:-k(更接近浏览器行为)
- 限制测试总时长(替代 -n):-t 30 表示持续压测 30 秒
- 输出 HTML 报告:-w > report.html
容易踩的坑
ab 简单但局限明显,使用中要注意:
- 不支持 HTTPS SNI(部分证书会握手失败),建议先用 HTTP 测试或换 wrk
- 无法维持登录态会话(无 Cookie 自动管理),复杂流程需用 Locust 或 JMeter
- 所有请求完全同构,不能模拟用户路径跳转、随机参数或思考时间
- 错误日志不在 PHP 中体现——若大量失败,应同步检查 Nginx error log、PHP-FPM slow log、MySQL 连接数、Redis 客户端连接数



















