Memcache :: set () сломанный канал - PullRequest
3 голосов
/ 15 сентября 2010

В общем, Memcache работает ... но в моем журнале встречается много случаев:

Memcache :: set () [memcache.set]: отправить из 8192 байтов не удалось с errno = 32 Разбитая труба

(количество байтов изменяется)

PHP5.3, Memcache класс (v2.2.5 - последняя стабильная версия )

Что такое сломанная труба, почему она так часто происходит и можно ли ее улучшить?

Ответы [ 3 ]

1 голос
/ 17 апреля 2012

Я довольно долго изучал и читал об этом и слышал много путаницы по этому поводу.Там очень мало документации по опциям 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.sess_lock_wait в файле memcached.ini, см. php -i|grep memcached для получения дополнительной информации).

Удачи!

0 голосов
/ 17 апреля 2011

Вообще говоря, когда я вижу ошибки Broken Pipe, это происходит во время чрезвычайно высокой нагрузки. Это с тобой? Иногда простая настройка параметров может решить проблему. Если вы разрешаете большее количество подключений к чему-либо, чем это может обработать, вы часто будете получать ошибку разорванного канала.

0 голосов
/ 25 января 2011

У меня похожий случай, но для 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 локально, поэтому не уверен, что здесь у меня проблема с сетью.

Я попытаюсь решить проблему исообщить, в чем была проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...