Sha*_*ane 8 php mysql apache xampp
我无法在stackoverflow上找到解决方案,大多数其他相关主题都与Apache没有先启动并出现此错误有关.我的问题是,在apache运行后,我的一些用户连接到我们的php/mysql网站将收到此错误:
PHP Warning: mysql_connect() [function.mysql-connect]:
[2002] Only one usage of each socket address (protocol/network address/port)
is normally permitted.
Run Code Online (Sandbox Code Playgroud)
这似乎是完全随机的,当我监视Apache的工作线程时,通常有许多空闲工作者可以接受新的连接/请求.
我的网站运行在Windows XP SP3,Xampp 1.7.7,四核,4GB内存,1TB HD,php/mysql规范:
Apache/2.2.21(Win32)mod_ssl/2.2.21 OpenSSL/1.0.0e PHP/5.3.8 mod_perl/2.0.4 Perl/v5.10.1
任何帮助我应该改变我的任何配置,以使其消失将不胜感激.我已经看过谷歌,甚至在Xampp论坛上,但是大多数人在启动Apache之前都会遇到这个问题,但是当用户遇到这个错误时,Apache运行正常.
Dol*_*rma 10
您可以修改窗口REGISTRY来解决此问题,
首先在regedit中打开此路径:
HKLM \ SYSTEM \ CurrentControlSet \ Services \ Tcpip \ Parameters
并创建4个新的DWORD键和值:
TcpTimedWaitDelay
REG_DWORD: 0000001e (hex)
MaxUserPort
REG_DWORD: 0000fffe (hex)
TcpNumConnections
REG_DWORD: 00fffffe (hex)
TcpMaxDataRetransmissions
REG_DWORD: 00000005 (hex)
Run Code Online (Sandbox Code Playgroud)
就像这个屏幕快照一样:
该错误实际上并非来自MySQL,而是来自Windows本身:
当连接关闭时,在关闭连接的一侧,5元组{协议,本地IP,本地端口,远程IP,远程端口}默认进入TIME_WAIT状态240秒.
在这种情况下,协议是固定的 - TCP
本地IP,远程IP和远程PORT通常也是固定的.所以变量是本地端口.
当您没有绑定1024-5000范围内的端口时会发生什么.所以粗略地说你有4000个端口.如果您在4分钟内使用所有这些 - 意味着大约每4秒钟进行16次Web服务呼叫,您将耗尽所有端口.这就是这个例外的原因.
换句话说,您已经耗尽了动态范围内的端口.那可能不应该发生.你在这里处理多少并发用户?
链接的博客有解决方法:
TIME_WAIT通过注册表编辑减少系统希望连接所花费的时间.各种各样的解决方法!
另请参阅Visual Studio论坛上的此问题,其解释如下:
端口将被锁定一两分钟以捕获在应用程序终止之前可能已发送但尚未到达的所有数据包.在Winsock API中,您可以设置套接字选项SO_REUSEADDR来解决此问题(也可以在.NET Socket类中设置此选项),但TcpListener太高级别,并且不允许您设置此选项.
连接到MySQL的基础代码或处理Apache连接的代码很可能不会尝试使用SO_REUSEADDR.
我敢打赌,改变keepalive超时会对此产生直接影响.即使从理论上减少它释放套接字,Windows也不同意并保留套接字保留.
这是Doldurma 的答案,但对于懒惰的人来说,您只需将其放入 .reg 文件中,然后单击它(在我的情况下不需要重新启动)
文件内容:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"TcpTimedWaitDelay"=dword:0000001e
"MaxUserPort"=dword:0000fffe
"TcpNumConnections"=dword:00fffffe
"TcpMaxDataRetransmissions"=dword:00000005
Run Code Online (Sandbox Code Playgroud)