Php Memcache::set()断开的管道
一般来说,Memcache正在工作。。。但我的日志中多次出现这种情况: Memcache::set()[Memcache.set]:发送 共8192个字节失败,错误号为32 断管 (字节数更改) PHP5.3级(v2.2.5-最新版本)Php Memcache::set()断开的管道,php,memcached,Php,Memcached,一般来说,Memcache正在工作。。。但我的日志中多次出现这种情况: Memcache::set()[Memcache.set]:发送 共8192个字节失败,错误号为32 断管 (字节数更改) PHP5.3级(v2.2.5-最新版本) 什么是破裂的管道,为什么会发生这么多,它可以改进吗?除了getextendedstats()之外,我有类似的情况 这是我认为合乎逻辑的观点。 我的假设是memcached配置不正确或存在网络问题,但我在本地运行memcached,所以不确定这里是否存在网络问题
什么是破裂的管道,为什么会发生这么多,它可以改进吗?除了getextendedstats()之外,我有类似的情况 这是我认为合乎逻辑的观点。 我的假设是memcached配置不正确或存在网络问题,但我在本地运行memcached,所以不确定这里是否存在网络问题
我将尝试解决问题,并让您知道问题出在哪里。一般来说,当我看到断管错误时,是在极高的负载下。你是这样吗?有时,简单的参数调整可以解决问题。如果你允许更多的连接到某个东西上,而不是某个东西可以处理的连接,你经常会遇到断管错误。我已经对此进行了很多研究和阅读,听到了很多关于这方面的困惑。服务器端的Memcached选项上几乎没有文档。我发现了一个隐藏的gem,它居然由MySQL托管。看看 有几个潜在原因,其中一些令人信服地引用了:
- OS级别上的ulimit设置为阻止附加连接的特定级别
- 连接数已达到最大值
- 它只会在高负载时发生(抱歉,但是duh!)
STAT accepting_conns 1
STAT listen_disabled_num 0
如果listen disabled\u 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_wait on memcached.ini文件,有关更多信息,请参阅php-I | grep memcached
)
祝你好运 这与连接有关,因为php试图连接不同服务器中的memcache实例。
$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);