错误:
mysqli_real_connect(): (HY000/2002): 每个套接字仅使用一次
地址(协议/网络地址/端口)通常是允许的。
然而,看来我有足够的端口.
DETAILS:
我有一个MySQL
服务器已经运行了几个月没有出现问题。我在跑步Windows 10、PHP 7.0 和 MySQL 5.7。这是一个繁忙的服务器,每小时处理大量事务。
大约一周以来,我收到的量过多:
mysqli_real_connect(): (HY000/2002): 每个套接字仅使用一次
地址(协议/网络地址/端口)通常是允许的。
我尝试过常见的建议,这些建议在其他机器上对我有用。
TcpTimedWaitDelay = 30 and MaxUserPort = 65534
I also added:
TcpNumConnections = 16777214 and TcpMaxDataRetransmissions = 5.
我可以通过 netsh 确认最大端口和超时。此外,当我运行 netstat /abno 时,我始终看到使用中的端口少于 1000 个。但是,我仍然收到上述错误。因此看来该机器甚至没有使用所有端口。
In my .ini
, 我有一个connection limit of 10,000
.
所以这看起来是一个窗口问题 https://blogs.msdn.microsoft.com/dgorti/2005/09/18/only-one-usage-of-each-socket-address-protocolnetwork-addressport-is-normally-permitted/而不是 MySQLi 的问题。 (可能是由于最近的 Windows 10 更新) - 不过可能是由于套接字未正确关闭。
修复 1:提供更多可用端口
Launch 注册表编辑器并浏览至:HKLM\System\CurrentControlSet\Services\Tcpip\Parameters\MaxUserPort
有一个字符串值,默认设置为 5000 - 这决定了可用端口的最大数量。您可以将其更改为 65534 以内的任何值。
确保重新启动网络服务器(最好是整个计算机)以使更改生效
修复 2:显式指定 localhost IP
任何与本地主机的连接都应指定为127.0.0.1
, 而不是localhost
修复 3:确认没有重复的服务
检查以确保您的 Web 服务器没有多个实例正在运行,或者有多个调用来打开与所述服务器的连接 - 因为这会锁定端口。打开服务.msc- 如果有重复的服务,您应该删除一个实例。
修复 4:您是否正确关闭连接?
如果可以的话,请发布您的代码,以便我们更好地了解发生的情况 - 以及连接是否正确关闭,从而释放套接字/端口
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)