
連接數逼近 max_connections,新請求報 Too many connections。
SET GLOBAL wait_timeout = 300; -- 5 分鐘,視業務調整
[mysqld]
wait_timeout = 300
interactive_timeout = 300 -- 交互式客戶端 (mysql 命令行等) 同步調整
| 問題 | 檢查點 | 修正措施 |
|---|---|---|
| 連接洩漏 | 代碼所有路徑是否 finally { close() } | 使用 try-with-resources / using / defer 確保釋放 |
| 連接池配置不當 | maxPoolSize、idleTimeout、maxLifetime | idleTimeout < wait_timeout,maxLifetime < 8h |
| 長事務/慢查詢佔用連接 | 慢查詢日誌、事務耗時監控 | 拆分長事務、優化慢 SQL、設置 statement timeout |
| 防火牆/網絡設備斷開閒置連接 | TCP keepalive、防火牆超時 | 啟用連接池 testOnBorrow/testWhileIdle、TCP keepalive |
Threads_connected / max_connections > 70% 告警SHOW PROCESSLIST 統計 Sleep 時長分佈| 業務類型 | 建議 wait_timeout | 理由 |
|---|---|---|
| 高頻短連接 (PHP 等) | 60-300s | 快速回收,防洩漏放大 |
| 連接池長連接 (Java/Go 等) | 300-600s | 配合池 idleTimeout=180s、maxLifetime=30min |
| 交互式分析 | 28800s (8h) | interactive_timeout 獨立設置 |