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

MySQL 無法連線排查實戰:PHP 執行逾時、TCP 連線耗盡與註冊表調優

     編輯:MySQL 資料庫相關知識

環境

Windows Server 2003 R2 / MySQL 5.0.18 / Apache 2.2 / PHP 5.2.17 / 瑞星防毒 + WebShield

問題 1:PHP 最大執行時間導致連線中斷

現象:長查詢 > 30 秒被 PHP 強制終止,MySQL 連線隨之斷開。

解決

; php.ini
max_execution_time = 300  ; 5 分鐘,0 表不限制 (慎用)

重啟 Apache 生效。

問題 2:高併發短連線導致「無法連線」 (錯誤 10048)

現象:頻繁開關連線,MySQL 短時間內無法接受新連線,停止發送 2 分鐘自動恢復。

根因

  • TCP TIME_WAIT 預設 240 秒 (註冊表 TcpTimedWaitDelay),連線釋放慢
  • 動態埠範圍預設 5000 (MaxUserPort),高併發下埠號耗盡

註冊表調優

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"TcpTimedWaitDelay"=dword:0000001e   ; 30 秒 (十六進位 0x1E)
"MaxUserPort"=dword:00008000         ; 32768 埠 (十六進位 0x8000)

**修改後必須重開機生效**。

驗證結果

  • 連線錯誤大幅減少
  • 出錯後自我恢復能力明顯提升
  • 安裝/未安裝 WebShield 結果一致,排除防毒干擾

PHP 版本選擇避坑 (補充)

結語

Windows + MySQL + PHP 高併發連線失敗,核心通常在 **PHP max_execution_time 過短** 與 **TCP 參數預設值過保守**。調大 PHP 逾時、縮短 TcpTimedWaitDelay、擴大 MaxUserPort 三招組合,穩定解決連線耗盡問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
項目正確選擇原因
VC6 vs VC9VC6Apache 使用 VC6 編譯,模組需同編譯器
Thread Safe vs Non Thread SafeThread SafeApache mod_php 以 DLL 載入,多執行緒需線程安全