【问题标题】:Memcache::set() broken pipeMemcache::set() 损坏的管道
【发布时间】:2010-09-15 01:47:51
【问题描述】:

一般来说,Memcache 正在工作……但我的日志中出现了很多这样的情况:

Memcache::set() [memcache.set]: 发送 8192 字节失败,errno=32 断管

(字节数变化)

PHP5.3,Memcache 类(v2.2.5 - 最新稳定版version

什么是坏管,为什么会发生这么多,能不能改善?

【问题讨论】:

    标签: php memcached


    【解决方案1】:

    我已经对此进行了相当长的研究和阅读,并且对此感到很困惑。关于服务器端的 Memcached 选项的文档很少。我发现了一个隐藏的宝石,令人惊讶地由 MySQL 托管。看看http://downloads.mysql.com/docs/mysql-memcached-en.pdf

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

    • 操作系统级别的 ulimit 设置为阻止其他连接的特定级别
    • 连接数已用完
    • 它只在高负载时发生(抱歉,但是啊!)

    对于大多数情况,我无法理解也无法想象上述情况是正确的。对于我们的案例,事实证明,当应用程序之前在自动模式下运行(在 -vv 详细模式下,我们说 ascii 写入)时,我们正在切换到二进制模式连接选项。一旦我们打开二进制选项,写入都会失败,从而导致管道损坏。

    至于最大连接数的影响,当您 telnet 进入时查看统计信息时可以检测到它们。查找以下内容

    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.ini 文件中的 memcached.sess_lock_wait,请参阅php -i|grep memcached 了解更多信息)。

    祝你好运!

    【讨论】:

      【解决方案2】:

      我有类似的情况,但对于 getextendedstats()

      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 所以不确定这里有网络问题。

      我会尽力解决问题并告诉你问题出在哪里。

      【讨论】:

      • 与连接有关,因为php尝试连接不同服务器中的memcache实例。
      【解决方案3】:

      一般来说,当我看到 Broken Pipe 错误时,它是在极高负载期间。你的情况是这样吗?有时简单的参数调整可以解决问题。如果您允许的连接数超出了某物的处理能力,您通常会遇到管道损坏错误。

      【讨论】:

        猜你喜欢
        • 2010-10-28
        • 2011-03-19
        • 1970-01-01
        • 2012-05-15
        • 1970-01-01
        • 2012-07-10
        • 1970-01-01
        • 2016-07-21
        相关资源
        最近更新 更多