SHOW PROCESSLIST 大量 Command=Sleep 進程,佔用連接數導致「Too many connections」。

mysql_close():程式碼疏漏、連接池未正確歸還wait_timeout/interactive_timeout 內無請求,但連接實際已斷(網絡故障、防火牆切斷),伺服器不知情-- 配置文件 [mysqld] 區段 wait_timeout = 600 -- 10 分鐘,視業務調整 -- 或動態生效(僅影響新連接) SET GLOBAL wait_timeout = 600;
mysqli_close()、PDO 設定 ATTR_PERSISTENT=falseminEvictableIdleTimeMillis、testWhileIdle=truewith conn.cursor() 上下文管理器# HikariCP 範例 spring.datasource.hikari.idle-timeout=300000 spring.datasource.hikari.max-lifetime=600000 spring.datasource.hikari.connection-timeout=30000 spring.datasource.hikari.leak-detection-threshold=60000
| 參數 | 適用場景 | 建議值 |
|---|---|---|
interactive_timeout | mysql 命令行、GUI 工具 | 28800 (8h) |
wait_timeout | 應用程式、腳本、API | 600 (10min) |