服务器: windows2000 server + iis5.0 + php isapi + mysql
我用php+mysql开发了一个web站,该站访问量很高。
但是正常运行了一个多星期以后,开始频繁出现Can't connect to MySQL server on 'localhost' (10048) 错误。
统计数据如下:
尝试失败连结数 10,594
每小时总连结数 885.37
% 15.91 %
可以看出,连接失败的比率非常高了。需要强调的是,一周之前,同样的连结数,并没有出现如此高的错误率。
原因分析:利用fport工具查看,你会发现有人在耗尽你的数据库连接。而很明显他们的特征是:有数十个连接来自同一IP,而且都是time-wait
解决方案,1。建议修改最大连接数,或者把 mysql_connect() 方法都改成了 mysql_pconnect() 方法,
2。治标,封锁这些IP,一个IP连接大于3的就有点不正常,封
3,治本,修改站点程序,严禁刷新太快!
链接数的修改:
此错误与一个注册表键值TcpTimedWaitDelay有关。减小Windows中 TcpTimedWaitDelay时间可解决此类问题,默认情况下为240(未设置的情况下也是这个数值)。此项设置需要到注册表如下位置进行设置:[HKEY_LOCAL_MACHINE] [SYSTEM] [CurrentControlSet] [Services] [Tcpip] [Parameters] [TcpTimedWaitDelay]如果注册表中没有TcpTimedWaitDelay这个项目,请增加这个项目,并设置为双字节(DWORD)类型。数值设置为30 ~ 60 之间即可。
TcpTimedWaitDelay描述:确定 TCP/IP 可释放已关闭连接并重用其资源前,必须经过的时间。关闭和释放之间的此时间间隔通称 TIME_WAIT 状态或两倍最大段生命周期(2MSL)状态。此时间期间,重新打开到客户机和服务器的连接的成本少于建立新连接。减少此条目的值允许 TCP/IP 更快地释放已关闭的连接,为新连接提供更多资源。如果运行的应用程序需要快速释放和创建新连接,而且由于 TIME_WAIT 中存在很多连接,导致低吞吐量,则调整此参数。 如何查看或设置: 使用 regedit 命令访问 HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/ Services/TCPIP/Parameters 注册表子键并创建名为 TcpTimedWaitDelay 的新 REG_DWORD 值。 将此值设置为十进制 30,其为十六进制 0×0000001e。该值将等待时间设置为 30 秒。 停止并重新启动系统。 缺省值:0xF0,它将等待时间设置为 240 秒(4 分钟)。建议值:最小值为 0×1E,它将等待时间设置为 30 秒。
http://adamghost.com/2008/11/mysql-10055-%E9%94%99%E8%AF%AF%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88/?jdfwkey=gkden3