任何有关以下间歇性Memcache连接失败的可能原因的建议:
Memcache::connect(): Server 127.0.0.1 (tcp 11211, udp 0) failed with:
Only one usage of each socket address (protocol/network address/port) is normally permitted.
据我所知,PHP脚本仅在构造Controller时尝试打开连接,即没有多次尝试打开连接。该错误报告在一个中,并且仅在尝试连接的地方进行。
我还查看了内存缓存的统计信息,这些数据似乎并没有错:
array(36) {
["pid"]=> string(4) "5788"
["uptime"]=> string(6) "731274"
["time"]=> string(10) "1533137924"
["version"]=> string(16) "1.4.5_4_gaa7839e
["pointer_size"]=> string(2) "64"
["curr_connections"]=> string(1) "2"
["total_connections"]=> string(8) "31881420"
["connection_structures"]=> string(3) "163"
["cmd_get"]=> string(8) "26219501"
["cmd_set"]=> string(8) "17532714"
["cmd_flush"]=> string(4) "1110"
["get_hits"]=> string(8) "25834764"
["get_misses"]=> string(6) "384737"
["delete_misses"]=> string(1) "5"
["delete_hits"]=> string(7) "1252043"
["incr_misses"]=> string(1) "0"
["incr_hits"]=> string(1) "0"
["decr_misses"]=> string(1) "0"
["decr_hits"]=> string(1) "0"
["cas_misses"]=> string(1) "0"
["cas_hits"]=> string(1) "0"
["cas_badval"]=> string(1) "0"
["auth_cmds"]=> string(1) "0"
["auth_errors"]=> string(1) "0"
["bytes_read"]=> string(11) "12021422144"
["bytes_written"]=> string(12) "163830241155"
["limit_maxbytes"]=> string(10) "4294967296"
["accepting_conns"]=> string(1) "1"
["listen_disabled_num"]=> string(1) "0"
["threads"]=> string(1) "4"
["conn_yields"]=> string(1) "0"
["bytes"]=> string(8) "89537575"
["curr_items"]=> string(5) "15811"
["total_items"]=> string(7) "2871704"
["evictions"]=> string(1) "0"
["reclaimed"]=> string(6) "570282"
}
如果Windows Server正在影响系统运行,则该系统
答案 0 :(得分:1)
This article 似乎可以解决问题。
这意味着您耗尽了所有可用的网络端口 机器。默认情况下,操作系统只有大约4000个可用端口 系统未保留的内容。发生什么事 网络连接已关闭,进入TIME_WAIT状态持续240 秒,并且无法重用,直到此等待状态结束。所以作为 例如,如果每秒有16个连接且持续4分钟 (16 * 4 * 60 = 3840),此后不久您将耗尽所有端口。 现在,如果您在同一台计算机上具有HAS和MTA,将获得 很快就筋疲力尽,因为除了与他们交流 彼此之间使用2个端口(一个用于MTA,另一个用于HAS), MTA占用了大量发送邮件的端口。
解决方案如下:
您可以通过修改以下值来解决此问题。
方法之一是增加动态端口范围。默认情况下,最大值为5000。您最多可以将其设置为65534。
HKLM\System\CurrentControlSet\Services\Tcpip\Parameters\MaxUserPort
是 使用的密钥。您可以做的第二件事是,一旦连接确实进入TIME_WAIT状态,您可以减少该状态的时间。 默认值为4分钟,但您可以将其设置为30秒。
HKLM\System\CurrentControlSet\Services\Tcpip\Parameters\TCPTimedWaitDelay
是使用的关键。进行这些更改后,必须重新启动系统。
如果失败,请尝试使用 resmon (鲜为人知的Windows资源监视器)来检查端口使用情况是否存在冲突的服务。您可以从Cortana搜索框或命令外壳中访问它。
(我想为此赞誉,但这是团队的努力!)
最后,当您使用 Memcache 连接时,使用connect
方法返回的值来检查连接是否成功很有用。如果使用Memcache::add_server
,则可能必须采用其他方法,因为这种方法只会在首次尝试访问内存缓存时发现连接失败。