首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 錯誤 1135 徹底解決:Can't create a new thread (errno 12)

     編輯:MySQL 資料庫相關知識

    錯誤完整訊息

    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

    根因:作業系統執行緒資源耗盡

    • 連接數過多,每個連接對應一個 OS 執行緒
    • 執行緒存活時間過長 (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;            -- 互動連接同理

    永久配置 (my.cnf)

    [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_timeout28800 (8h)Global/Session非互動連接 (JDBC/ODBC/應用連線池) 閒置超時秒數
    interactive_timeout28800 (8h)Global/Session互動連接 (mysql client) 閒置超時秒數
    innodb_thread_sleep_delay0 (無限)GlobalInnoDB 內部同步原語自旋延遲微秒數,降低 CPU 佔用

    常見誤區

    只設 wait_timeout 不生效? 必須同時設定 interactive_timeout,因連接類型由客戶端 CLIENT_INTERACTIVE 標誌決定,MySQL 啟動時會以兩者之一初始化 Session 級 wait_timeout。

    長期治理建議

    1. 應用層連線池配置 maxIdleTime < 數據庫 wait_timeout
    2. 啟用 thread_pool (Percona/MySQL 8.0 Enterprise) 解決「連接多、活躍少」場景
    3. 監控 Threads_connected、Threads_running,設定告警閾值
    4. 定期 KILL 長時間 Sleep 連接 (配合 pt-kill 自動化)
    1. 上一篇文章:
    2. 下一篇文章:
    Copyright © 程式碼之家 All Rights Reserved