ThinkPHP6稳定支撑1万并发需彻底优化框架层:关闭调试与日志、精简中间件、启用PDO持久连接、调大MySQL连接数、预编译路由、开启OPcache、Nginx合理配置worker参数,并规范JMeter压测策略。

ThinkPHP6 要稳定支撑 1 万并发接口压测,不能只靠堆机器或换 Swoole,核心是“让框架不拖后腿”——把默认配置、中间件、数据库连接、缓存和外部依赖全部调成高压模式。实测中,多数卡在 500~2000 QPS 的项目,调完能稳上 8000+ QPS,关键就在这几处。
关闭所有干扰项:先让接口“干净”起来
压测不是比谁代码多,而是比谁副作用少。TP6 默认开着的调试、日志、中间件,在 1 万并发下会直接成为瓶颈。
- .env 中强制设APP_DEBUG=false,同时确认 APP_TRACE=false(避免 trace 日志刷盘)- app/middleware.php 里临时注释掉
SessionMiddleware、ValidateRuleMiddleware 和任何 Token 校验中间件(压测不走鉴权链路)- config/log.php 改为
'type' => 'stdout' 或直接 'level' => 'off',禁用文件日志- 所有发短信、调支付、写审计日志、触发 Webhook 的逻辑,统一 mock 成
return true 或走影子开关(如检查请求头 X-Test-Mode: full)数据库必须“零新建连接”
MySQL 默认 max_connections=151,1 万并发哪怕只开 10% 连接数也早被打满。TP6 默认每请求新建 PDO 连接,这是最大雷区。
- config/database.php 开启持久化:'params' => [PDO::ATTR_PERSISTENT => true]- 同时调大 MySQL 的
max_connections 至 2000+,并确认 wait_timeout ≥ 300- 压测期间禁用读写分离(
'deploy' => 0),避免从库延迟导致数据不一致或重试放大压力- 高频查询加
->withoutFieldMapping(),避开 TP8/TP6.3+ 新增的 SHOW COLUMNS 元数据查询PHP 和框架层硬核提速
没开 OPcache 或路由没预编译,单请求就多耗 50ms 以上,1 万并发就是 500 秒纯浪费。
立即学习“PHP免费学习笔记(深入)”;
- php.ini 确保:opcache.enable=1、opcache.memory_consumption=256、realpath_cache_size=4096K- 执行
php think optimize:route 预编译路由,避免每次请求解析正则- Nginx 配置
worker_processes auto、worker_connections 10240、开启 keepalive_timeout 30- 若用 PHP-FPM,
pm = static + pm.max_children 设为 CPU 核数 × 4 以上(如 16 核配 64)JMeter 压测配置要“像人”,别当炸弹
工具用错,测出来的不是接口性能,是网络握手或中间件锁竞争能力。
- 线程组启用 Ramp-up Period(比如 1000 并发分 30 秒拉起),避免瞬时洪峰打崩连接池- 必开 HTTP Cookie Manager,否则登录态丢失,后续请求全 401
- 接口若需 token,在前置请求用 JSON Extractor 提取,再填入 Header:
Authorization: Bearer xxx- Body Data 传 JSON 时,Header 显式加
Content-Type: application/json,别用 Parameters 标签页- 断言加 JSON Path Extractor + Response Assertion,验证业务成功(比如
$.code == 0),不只看 HTTP 状态码



















