SQLSTATE[HY000] [1135] Can't create a new thread (errno 12);
if you are not out of available memory, you can consult the manual for a possible OS-dependent bug
wait_timeout/interactive_timeout 預設 8 小時),閒置連接堆積pthread_create 失敗 (errno 12 = ENOMEM)SET GLOBAL innodb_thread_sleep_delay = 40; -- 降低內部忙等待
SET GLOBAL wait_timeout = 100; -- 非互動連接 100 秒無活動即斷開
SET GLOBAL interactive_timeout = 100; -- 互動連接同理
[mysqld]
innodb_thread_sleep_delay = 40
wait_timeout = 100
interactive_timeout = 100
重啟 MySQL 生效。
-- 檢查當前連接狀態
SHOW PROCESSLIST;
-- 或
SELECT * FROM information_schema.PROCESSLIST WHERE COMMAND = 'Sleep';
-- 確認參數生效
SHOW VARIABLES LIKE '%timeout%';
| 參數 | 預設值 | 作用域 | 說明 |
|---|---|---|---|
| wait_timeout | 28800 (8h) | Global/Session | 非互動連接 (JDBC/ODBC/應用連線池) 閒置超時秒數 |
| interactive_timeout | 28800 (8h) | Global/Session | 互動連接 (mysql client) 閒置超時秒數 |
| innodb_thread_sleep_delay | 0 (無限) | Global | InnoDB 內部同步原語自旋延遲微秒數,降低 CPU 佔用 |
只設 wait_timeout 不生效? 必須同時設定 interactive_timeout,因連接類型由客戶端 CLIENT_INTERACTIVE 標誌決定,MySQL 啟動時會以兩者之一初始化 Session 級 wait_timeout。
maxIdleTime < 數據庫 wait_timeoutthread_pool (Percona/MySQL 8.0 Enterprise) 解決「連接多、活躍少」場景Threads_connected、Threads_running,設定告警閾值KILL 長時間 Sleep 連接 (配合 pt-kill 自動化)