我的Perl Web应用程序出现问题,在Windows 2008r2上的Apache 2.2上运行,在CentOS服务器上使用独立的MySQL数据库。
以下是问题:我定期收到错误消息:
DBI connect('host=10.148.xxx.xxx:database=XXX','root',...) failed: Can't create TCP/IP socket (10106)
当我周期性地说,这意味着大部分时间一切都按预期工作,但我不时得到这条消息,它会导致我的应用程序抛出错误页面。
我在互联网上搜索了很多,并找到了一些对我不起作用的推荐解决方案。
首先,我认为我的数据库服务器无法访问,但使用MySQL企业监控器我发现事实并非如此。
然后我认为我可能已经用完了TCP端口,所以我增加了临时端口的数量并减少了超时时间,如本文所述: http://www.outsystems.com/forums/discussion/6956/how-to-tune-the-tcp-ip-stack-for-high-volume-of-web-requests/
总之我这样做了:
通过在Windows注册表项HKLM \ SYSTEM \ CurrentControlSet \ Services \ Tcpip \ Parameters上将TcpTimedWaitDelay TCP / IP参数设置为30秒来减少TIME_WAIT,作为DWORD值。
通过命令netsh int ipv4 set dynamicportrange tcp start = 32767 num = 32768将dynamicportrange设置为更高的值来增加临时端口的范围,这将设置端口范围从32768到65535。"
但没有运气,仍然有超时
接下来,我使用这些参数更新了我的Apache配置文件,以进一步减少KeepAliveTimeout
:
Timeout 100
MaxKeepAliveRequests 100
KeepAliveTimeout 5
仍然没有运气。
我的主要问题是一切都在大部分时间都在工作,我甚至无法复制这个问题,但它每天都会出现,我的客户也很烦恼。
我甚至不确定要走向哪个方向,是MySQL,是Perl DBI模块问题,是Apache,还是TCP / IP配置,所以任何帮助都会非常感激。
答案 0 :(得分:0)
看起来你有一个单独的问题,表现在"无法创建TCP / IP套接字(10106)"。
除非你扭转了大量非常快速的连接,否则你不需要编辑短暂的端口或超时。通过这样做,你只是推迟了以后发生的事业。
我会检查你的应用程序(完整版)是否正在关闭它们的连接?这包括数据库连接,客户端http套接字,文件/目录句柄等...使用" netstat"监视应用程序运行时当前打开的端口/连接。找出不断增加的内容,然后在您的应用(或其他同时运行在同一台计算机上的应用)中追踪导致这类连接的原因。然后,您可以采取措施正确关闭连接,解决问题。
希望这会有所帮助。祝你好运。