服务器:   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

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐