Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> 電腦軟體教學 >> 伺服器技術 >> 關於伺服器

Discuz (1040) Not Connect 錯誤根因:KB967723 導致 MySQL 連接池耗盡,註冊表優化 MaxUserPort 徹底解決

編輯:關於伺服器

服務器上多個 Discuz 論壇同時報 (1040) Not Connect,官方提示 Too many connections,但實際業務量極低,netstat -an | findstr :3306 顯示連接數遠未達上限。經排查,罪魁禍首是微軟補丁 KB967723 修改了 TCP/IP 動態端口分配行為,導致 MySQL 短連接場景下客戶端臨時端口耗盡。

補丁影響機制

KB967723 限制了用戶態動態端口範圍 (預設 5000-65534),並在高併發短連接下加速端口耗盡與 TIME_WAIT 堆積,使新連接無法建立,MySQL 回報 Can't connect to MySQL server (1040)。

最佳解決方案:擴大動態端口池 (免卸載補丁)

  1. 運行 regedit,定位:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
  2. 右鍵新建 DWORD (32 位) 值:
    名稱:MaxUserPort
    數值:65534 (十進制,最大值)
    基數:十進制
  3. 可選:同級新建 TcpTimedWaitDelay = 30 (十進制,秒),縮短 TIME_WAIT 佔用時間 (預設 240s)。
  4. 重啟服務器生效。

驗證

重啟後,Discuz 前後台訪問恢復正常,netstat 觀察端口佔用平穩,錯誤日志不再出現 1040。

補充優化:MySQL 端配置

  • wait_timeout = 60 (縮短空閒連接保持)
  • max_connections = 1000 (視記憶體調大)
  • 應用層啟用連接池 (如 PHP mysqli 持久連接、Java HikariCP),減少頻繁建連開銷。
注意:修改註冊表影響全系統 TCP 行為,建議在維護窗口操作並做快照。若服務器同時跑其他對端口敏感的舊應用,變更前請充分測試。
Copyright © Windows教程網 All Rights Reserved