Perl Web应用程序问题:DBI连接失败:无法创建TCP / IP套接字(10106)

时间:2016-05-17 11:52:32

标签: mysql apache perl tcp

我的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配置,所以任何帮助都会非常感激。

1 个答案:

答案 0 :(得分:0)

看起来你有一个单独的问题,表现在"无法创建TCP / IP套接字(10106)"。

除非你扭转了大量非常快速的连接,否则你不需要编辑短暂的端口或超时。通过这样做,你只是推迟了以后发生的事业。

我会检查你的应用程序(完整版)是否正在关闭它们的连接?这包括数据库连接,客户端http套接字,文件/目录句柄等...使用" netstat"监视应用程序运行时当前打开的端口/连接。找出不断增加的内容,然后在您的应用(或其他同时运行在同一台计算机上的应用)中追踪导致这类连接的原因。然后,您可以采取措施正确关闭连接,解决问题。

希望这会有所帮助。祝你好运。