gpt4 book ai didi

php - Memcache::set() 断管

转载 作者:搜寻专家 更新时间:2023-10-31 21:45:58 24 4
gpt4 key购买 nike

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

Memcache::set() [memcache.set]: send of 8192 bytes failed with errno=32 Broken pipe

(字节数变化)

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

什么是破管,为什么会发生这么多,能否改善?

最佳答案

我已经对此进行了相当多的研究和阅读,并且听到了很多对此的困惑。关于服务器端 Memcached 选项的文档非常少。我发现了一个隐藏的 gem ,令人惊讶的是由 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 获取更多信息)。

祝你好运!

关于php - Memcache::set() 断管,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3714127/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com