check_interval必须≥3000毫秒,需与heartbeat=true和max_idle_time协同使用,三者构成连接保活闭环,配置后须清除runtime并重启服务。

Hyperf 3.1 启用 Swow 引擎后,check_interval 是数据库和 Redis 连接池中一个关键的心跳检测参数,但它**不能随意设置**,Swow 对其有明确的硬性要求。
Swow 要求 check_interval ≥ 3000 毫秒
该值单位为毫秒,代表连接池检查空闲连接健康状态的时间间隔。Swow 底层强制校验:若 check_interval (即小于 3 秒),心跳检测会异常中断,导致 idle 连接无法及时回收,进而引发连接泄漏或 pool exhausted 报错。
- 推荐设为
3000(3 秒)或5000(5 秒),平衡检测及时性与系统开销 - 不可设为
0或负数;也不建议设得过大(如超过 30000),否则失效连接可能滞留过久 - 注意:这不是 Swoole Server 的
heartbeat_check_interval,二者作用域不同,不要混淆
必须配合 heartbeat 和 max_idle_time 才生效
check_interval 单独配置无效,需与以下两个参数协同使用:
-
'heartbeat' => true:显式开启连接归还前的健康探测(默认为false) -
'max_idle_time' => 86000:单位毫秒,必须严格小于 MySQL 的wait_timeout(例如 MySQL 设为 86400 秒,则此处设 86000)
三者共同构成“连接保活闭环”:每 check_interval 检查一次空闲连接,对超时(> max_idle_time)且启用了 heartbeat 的连接,执行 SELECT 1 验证,失败则立即销毁。
配置位置与生效前提
在 config/autoload/databases.php(数据库)或 config/autoload/redis.php(Redis)对应连接池配置块内添加:
'pool' => [
'min_connections' => 8,
'max_connections' => 64,
'check_interval' => 3000, // ✅ 必须 ≥ 3000
'heartbeat' => true, // ✅ 必须显式开启
'max_idle_time' => 86000, // ✅ 必须比服务端 wait_timeout 少 30–60 秒
],
⚠️ 关键动作:改完后必须执行 rm -rf runtime/container && php bin/hyperf.php start,否则旧 Pool 实例残留,新配置不生效。











