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

Memcache::set()管道破裂

  •  3
  • philfreo  · 技术社区  · 15 年前

    Memcache::set()[内存缓存.set]:发送 共8192个字节失败,错误号=32 破裂的管子

    更改字节数(字节)

    Memcache 等级(v2.2.5-最新稳定 version )

    什么是断管,为什么会发生这么多,能不能改进?

    3 回复  |  直到 15 年前
        1
  •  1
  •   Jack    14 年前

    我已经对此进行了大量的研究和阅读,并且在这方面听到了很多困惑。关于服务器端Memcached选项的文档很少。我发现了一个隐藏的gem,它由MySQL托管。过来看 http://downloads.mysql.com/docs/mysql-memcached-en.pdf

    有几个潜在的原因,一些令人信服地引用:

    • 操作系统级别的ulimit设置为阻止其他连接的特定级别

    我无法理解也无法想象在大多数情况下上述情况是正确的。在我们的例子中,当应用程序运行在auto-modeprior(in-vv详细模式,我们称之为ascii写入)时,我们切换到了二进制模式连接选项。一旦我们打开二进制选项,写操作都会失败,从而导致管道破裂。

    STAT accepting_conns 1
    STAT listen_disabled_num 0
    

    如果 listen disabled_num 是0,很好。这意味着自memcached实例启动后就没有断开连接了。

    另外,请尝试使用以下Memcached选项优化连接,至少在PHP中,我们使用以下选项:

    $this->m = new Memcached();
    $this->m->setOption(Memcached::OPT_TCP_NODELAY, true);
    $this->m->setOption(Memcached::OPT_LIBKETAMA_COMPATIBLE, true);
    $this->m->setOption(Memcached::OPT_SERIALIZER, Memcached::SERIALIZER_IGBINARY);
    

    我只能说,在应用程序端、memcached服务器端试用一些设置组合,并更改应用程序上的其他默认设置(例如。memcached.sess_lock_等待打开内存缓存.ini文件,请参阅 php -i|grep memcached 更多信息)。

    祝你好运!

        2
  •  0
  •   Aram    15 年前

    Notice: Memcache::getextendedstats(): send of 9 bytes failed with errno=32 Broken pipe in /usr/local/zend/share/ZendFramework/library/Zend/Cache/Backend/Memcached.php on line 382
    

    这是我认为合乎逻辑的意见。 http://unix.derkeiler.com/Newsgroups/comp.unix.programmer/2006-02/msg00348.html

    我的假设是memcached配置不正确或者网络有问题,但是我在本地运行memcached,所以不确定我有网络问题。

    我会尽力解决问题,让你知道问题出在哪里。

        3
  •  0
  •   Creativehavoc    15 年前

    一般来说,当我看到破裂的管道错误时,它是在非常高的负荷。你就是这样吗?有时,简单的参数调整可以解决这个问题。如果您允许连接到某个对象的连接超出了某个对象所能处理的范围,则通常会出现断管错误。

    推荐文章