Hyperf 3.1 启用 Swow 后必须使用 Swow 专用数据库连接池配置,删除原 pool 数组并新增含 min_connections、max_connections 等参数的 Swow pool 结构,check_interval ≥3000ms,需清理 runtime/container 后重启服务。

Hyperf 3.1 启用 Swow 协程引擎后,数据库连接池必须用 Swow 专用配置,原 Swoole 兼容层的 pool 参数已失效。配错会导致连接泄漏、pool exhausted 报错或 idle 连接不回收。
确认 Swow 已就绪
启动服务后看控制台输出是否有 Swow\Coroutine\Channel 字样;若无,需将 config/autoload/server.php 中 'mode' => SWOOLE_BASE 改为 'mode' => SWOW_BASE,并确保 Swow 版本 ≥ 1.5.0。
删除旧 pool 配置项
在 config/autoload/databases.php 的 MySQL 配置块中,彻底删掉原来一级的 pool 数组(如 'pool' => [...]),否则 Swow 会跳过新配置,沿用旧逻辑引发连接泄漏。
填入 Swow 专用 pool 参数
在 'driver' => 'mysql' 同级新增如下结构:
'pool' => [
'min_connections' => 8,
'max_connections' => 64,
'connect_timeout' => 5.0,
'wait_timeout' => 2.0,
'heartbeat' => true,
'retry_interval' => 100,
'check_interval' => 3000,
],
-
check_interval单位是毫秒,必须 ≥ 3000(即 ≥3 秒),低于该值会导致心跳异常中断 -
retry_interval是毫秒级重试间隔,不可设为 0,否则连接失败后不再重试 -
min_connections建议设为 CPU 核数 × 2~4,max_connections按ulimit -n、Redis/MySQL 的max_connections及内存综合推算(例如:单连接约占用 3~5MB 内存,64 连接 ≈ 200MB)
强制刷新配置生效
执行以下命令清空容器缓存并重启:
rm -rf runtime/container php bin/hyperf.php start
不清理 runtime/container 会导致旧 Pool 实例残留,新参数不加载。
动态伸缩可选补充(非必需但推荐)
如业务流量波动大(如秒杀、定时任务高峰),可引入基于 QPS 和等待时间的动态调整逻辑,参考 PID 控制器实时调节 max_connections 上限,避免资源浪费或连接不足。











