错误:
mysqli_real_connect():( HY000 / 2002):每个套接字只有一种用法 通常允许地址(协议/网络地址/端口)。
但是,似乎我有足够的端口。
详情:
我有一台MySQL
服务器已经运行了几个月没有问题。我正在运行 Windows 10,PHP 7.0和MySQL 5.7 。这是一台繁忙的服务器,每小时交易量很大。
现在大约一个星期,我的体积过大了:
mysqli_real_connect():( HY000 / 2002):每个套接字只有一种用法 通常允许地址(协议/网络地址/端口)。
我尝试了一些共同的建议,这些建议在其他机器上对我有用。
TcpTimedWaitDelay = 30 and MaxUserPort = 65534
我还添加了:
TcpNumConnections = 16777214 and TcpMaxDataRetransmissions = 5.
我可以通过netsh确认最大端口和超时。此外,当我运行netstat / abno时,我一直看到使用的端口少于1000个。但是,我仍然遇到上述错误。因此看起来机器甚至没有使用所有端口。
在我的.ini
中,我有connection limit of 10,000
。
答案 0 :(得分:0)
因此,这似乎是a windows issue,而不是MySQLi的问题。 (可能是由于最近的Windows 10更新)-尽管可能是由于套接字未正确关闭。
修复1:使更多端口可用
启动 regedit.exe 并浏览至: HKLM \ System \ CurrentControlSet \ Services \ Tcpip \ Parameters \ MaxUserPort
有一个字符串值,默认情况下设置为5000-这确定了可用端口的最大数量。您最多可以将其更改为65534。
确保重新启动Web服务器(最好是重启整个计算机),以使更改生效
修复2:明确指定本地主机IP
与本地主机的任何连接都应指定为127.0.0.1
,而不是localhost
修复3:确认没有重复的服务
检查以确保您的Web服务器没有正在运行的多个实例,或有多个调用来打开与该服务器的连接-因为这将锁定端口。打开 services.msc -如果服务重复,则应删除一个实例。
修复4:您是否正确关闭了连接?
如果可以的话,请发布您的代码,以便我们更好地了解正在发生的事情-以及是否正确关闭了连接,从而释放了套接字/端口