У меня есть установка memcached с двумя серверами. Когда запись в memcached не удается, я получаю уведомление по электронной почте. Примерно один раз в день появляется ошибка «СЕРВЕР ОТКАЗАЛСЯ И ОТКЛЮЧЕН ДО ВРЕМЕНИ ПОВТОРА», и я не знаю, как найти причину.
Я использую клиент PHP Memcached.
Я не использую слишком длинные ключи. Я пробовал добавить флаг -v, но это не помогает, журнал остается пустым.
Если я включаю вывод getStats в уведомление об ошибке, я получаю следующую информацию:
Array
(
[192.168.0.3:11211] => Array
(
[pid] => 28167
[uptime] => 3671962
[threads] => 4
[time] => 1358714713
[pointer_size] => 64
[rusage_user_seconds] => 24516
[rusage_user_microseconds] => 130981
[rusage_system_seconds] => 86246
[rusage_system_microseconds] => 675512
[curr_items] => 1616352
[total_items] => 118339822
[limit_maxbytes] => 2684354560
[curr_connections] => 8
[total_connections] => 78108681
[connection_structures] => 356
[bytes] => 981522779
[cmd_get] => 1561752945
[cmd_set] => 158718324
[get_hits] => 1383072575
[get_misses] => 178680370
[evictions] => 0
[bytes_read] => 138113231690
[bytes_written] => 1091741700765
[version] => 1.4.15
)
[192.168.0.4:11211] => Array
(
[pid] => -1
[uptime] => 0
[threads] => 0
[time] => 0
[pointer_size] => 0
[rusage_user_seconds] => 0
[rusage_user_microseconds] => 0
[rusage_system_seconds] => 0
[rusage_system_microseconds] => 0
[curr_items] => 0
[total_items] => 0
[limit_maxbytes] => 0
[curr_connections] => 0
[total_connections] => 0
[connection_structures] => 0
[bytes] => 0
[cmd_get] => 0
[cmd_set] => 0
[get_hits] => 0
[get_misses] => 0
[evictions] => 0
[bytes_read] => 0
[bytes_written] => 0
[version] =>
)
)
MEMCACHED_SERVER_TEMPORARILY_DISABLED или "СЕРВЕР ОТКАЗАЛСЯ И ОТКЛЮЧЕН ДО ВРЕМЕННОЙ ПОВТОРНОЙ ПОВТЫ"создается libmemcached
библиотека. Я не могу подтвердить, как pecl_memcached
обрабатывает эту ошибку, но я предполагаю, что это будет считаться стандартной ошибкой подключения. Это сообщение будет выдано, когда соединение превышает тайм-аут и / или предел повторных попыток. (видеть Варианты ввода / вывода)
Естественно, поскольку это временная проблема, вы должны спроектировать свое приложение PHP так, чтобы оно переключалось на следующий сервер кеша или вытаскивал затронутый сервер из списка серверов.
В моем случае отключение опции поведения tcp_nodelay
заставил это работать.
Кажется, это вариант pylibmc
, который представляет собой оболочку Python вокруг libmemcached
, но в документации говорится, что этот параметр принадлежит к тем, которые настраиваются напрямую в libmemcached
.
Для получения дополнительной информации см. pylibmc
документы http://sendapatch.se/projects/pylibmc/behaviors.html
В моем случае я изменил localhost на 127.0.0.1 в своем коде. и я могу устранить ошибку "СЕРВЕР ОТКЛЮЧЕН И ОТКЛЮЧЕН ДО ВРЕМЕНИ ПОВТОРНОЙ ПОВТОРЫ"
надеюсь, что это помогло
'options' => array(
'servers' => array('127.0.0.1', 11211),
В моем случае причиной этого сообщения об ошибке было неправильное имя сервера.
Каким-то образом код, подготавливающий строку конфигурации для использования, был испорчен, и перед одним из имен серверов memcache появился пробел. Это приводит к вышеупомянутому сообщению об ошибке при чтении с сервера.
Я использую PHP и расширение Memcached. Добавление имени сервера с пробелом сработало без каких-либо претензий, т.е. для них нет внутренней проверки. Проверяются только во время подключения к серверу.