代码之家  ›  专栏  ›  技术社区  ›  vogomatix

Memcache间歇性错误

  •  3
  • vogomatix  · 技术社区  · 6 年前

    对于以下间歇性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服务器上运行,如果这会影响到

    1 回复  |  直到 6 年前
        1
  •  1
  •   vogomatix    6 年前

    This article 似乎可以解决问题。

    这意味着您正在耗尽上的所有可用网络端口 机器。默认情况下,操作系统只有大约4000个端口可用 这不是系统保留的。什么时候会发生 网络连接关闭,进入等待状态240 秒,在该等待状态结束之前不能重复使用。所以作为一个 例如,如果在4分钟内每秒有16个连接 (16*4*60=3840),之后很快就会把所有端口都排尽。 现在,如果您在同一台计算机上有和MTA,这将得到 很快就精疲力竭了,因为除了与他们交流 彼此使用2个端口(一个用于MTA,一个用于HAS),然后 MTA使用了大量发送邮件的端口。

    解决方法如下:

    您可以通过修改以下值来修复此问题。

    1. 其中一种方法是增加动态端口范围。默认情况下,最大值为5000。您可以设置为65534。 HKLM\System\CurrentControlSet\Services\Tcpip\Parameters\MaxUserPort 是 使用的关键。

    2. 您可以做的第二件事是,一旦连接进入时间等待状态,您就可以减少处于该状态的时间。 默认值为4分钟,但可以将其设置为30秒。 HKLM\System\CurrentControlSet\Services\Tcpip\Parameters\TCPTimedWaitDelay 是使用的关键。

    进行这些更改后,必须重新启动系统。

    如果失败,请尝试使用 雷斯蒙 (一个鲜为人知的Windows资源监视器)以检查端口使用情况是否存在冲突服务。您可以从Cortana搜索框或命令shell访问它…

    (我想为这个申请荣誉,但这是团队的努力!)

    最后,当你与 小精灵 ,检查连接是否成功,返回 connect 方法。如果使用 Memcache::add_server 因为这个方法只会发现在第一次尝试访问memcache时连接失败。