thinkphp性能压测核心是切高压模式:关闭app_debug/app_trace、注释非必要中间件、日志设stdout或关闭、mock副作用操作;开启pdo持久连接、调大mysql max_connections、关闭读写分离;启用opcache、预编译路由、nginx worker调优、php-fpm设static模式。

Linux 下对 ThinkPHP 应用做性能压测,核心不是“怎么发起请求”,而是“如何让压测结果真实反映框架与服务瓶颈”。多数人卡在 500~2000 QPS,问题往往出在配置没切到高压模式,而非代码或硬件。
压测前必须清理的干扰项
ThinkPHP 默认配置是为开发友好设计的,高并发下会迅速拖垮性能:
- .env 中强制关闭调试:APP_DEBUG=false、APP_TRACE=false,避免 trace 日志刷盘和模板重编译
- 注释掉非必要中间件:如 SessionMiddleware、TokenVerifyMiddleware、ValidateRuleMiddleware——压测不走鉴权链路
- 日志输出设为 stdout 或彻底关闭:config/log.php 中设 'type' => 'stdout' 或 'level' => 'off',禁用文件写入
- 所有副作用操作统一 mock:发短信、调支付、写审计日志、触发 Webhook,全部替换为 return true 或检查 X-Test-Mode 请求头
数据库与连接层硬性调优
MySQL 连接池打满是 TP 压测失败最常见原因,1000 并发就报 Too many connections,说明没开持久连接:
-
开启 PDO 持久化:config/database.php 中加入
'params' => [PDO::ATTR_PERSISTENT => true] -
调大 MySQL 最大连接数:mysql> SET GLOBAL max_connections = 2000; 同时确认
wait_timeout ≥ 300 -
压测期间关闭读写分离:设
'deploy' => 0,避免从库延迟引发重试放大压力 -
高频查询跳过字段映射:加
->withoutFieldMapping(),避开 SHOW COLUMNS 元数据查询开销
PHP 与 Web 服务关键配置
没开 OPcache 或路由未预编译,单请求多耗 50ms+,1 万并发就是纯浪费:
-
确保 OPcache 全启用:php.ini 中
opcache.enable=1、opcache.memory_consumption=256、realpath_cache_size=4096K -
预编译路由表:执行
php think optimize:route,避免每次请求解析正则 - Nginx worker 调优:worker_processes auto;worker_connections 10240;keepalive_timeout 30
- PHP-FPM 进程模型设为 static:pm = static;pm.max_children ≥ 压测并发数(如 16 核配 64)
JMeter / wrk 实操要点
工具用错,测出来的不是接口性能,而是网络握手或中间件锁竞争能力:
- 别用瞬时洪峰:JMeter 线程组启用 Ramp-up Period(如 1000 并发分 30 秒拉起)
- HTTP Header 必加 X-Requested-With:否则 TP 某些版本会拒绝请求
- JSON 接口 Body 用 Raw Data + Content-Type: application/json,别用 Parameters 标签页
-
wrk 更适合高并发验证:命令如
wrk -t4 -c400 -d30s http://api.example.com/user,支持 Lua 脚本动态参数
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











