首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

PHP mysql_connect 隨機報警告:Windows TCP 端口耗盡根因與注冊表優化

     編輯:程式設計綜合問答

現象

高峰期每秒 20+ 插入,隨機出現 PHP Warning: mysql_connect(),刷新即恢復。環境:Win2003 + IIS6 + PHP 5.4 + MySQL 5.1。

根因分析

Windows 默認動態端口範圍 1024~5000,TIME_WAIT 默認 240 秒。高並發短連接導致端口快速耗盡,新連接無可用端口而失敗。

注冊表優化 (需重啟)

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"MaxUserPort"=dword:0000fffe        ; 擴大至 65534 (最大)
"TcpTimedWaitDelay"=dword:0000001e  ; 縮短 TIME_WAIT 至 30 秒 (默認 240)
"TcpNumConnections"=dword:00fffffe  ; 最大連接數

參考:MSDN TCP/IP 端口耗盡

應用層優化 (必須配合)

  1. 啟用持久連接:PHP 使用 mysql_pconnect 或 PDO ATTR_PERSISTENT => true,複用連接減少握手/端口佔用。
  2. 連接池:引入 ProxySQL 或將 PHP-FPM 進程數調大,保持長連接。
  3. 批量寫入:合併 INSERT INTO ... VALUES (...),(...),(...) 減少 Round-trip。
  4. 異步隊列:寫入請求推入 Redis/RabbitMQ,後台 Worker 批量入庫,平滑峰值。

驗證效果

netstat -an | find /c "TIME_WAIT"  // 優化前數萬,優化後應大幅下降
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved