Php Memcache间歇性错误

Php Memcache间歇性错误,php,memcached,Php,Memcached,对于以下间歇性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脚本仅在构造控制器时尝试打开连接,即没有多次尝试打开连接。在一个位置报告

对于以下间歇性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脚本仅在构造控制器时尝试打开连接,即没有多次尝试打开连接。在一个位置报告错误,并且仅尝试连接一个位置

我还查看了memcached统计数据,这些数据似乎没有错:

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上运行,如果这会影响某些事情

似乎可以解决问题

这意味着您正在耗尽计算机上所有可用的网络端口 机器。默认情况下,操作系统只有大约4000个可用端口 系统未保留的。当任何人 网络连接已关闭,它将进入等待状态240秒 秒,直到此等待状态结束后才能重新使用。所以作为一个 例如,如果在4分钟内每秒有16个连接 (16*4*60=3840),之后不久将排出所有端口。 现在,如果您在同一台计算机上安装了HAS和MTA,则将获得 很快就筋疲力尽了,因为除了与他们交流 彼此使用两个端口(一个用于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搜索框或命令shell访问它

    (我想为此获得荣誉,但这是团队的努力!)

    最后,当您使用Memcache连接时,使用
    connect
    方法返回的值检查您的连接是否成功非常有用。如果使用
    Memcache::add_server
    ,您可能必须采用不同的方法,因为此方法只会在首次尝试访问Memcache时发现连接失败