Назад | Перейти на главную страницу

Как отлаживать ошибки memcached «СЕРВЕР ОТКЛЮЧЕН И ОТКЛЮЧЕН ДО ВРЕМЕНИ ПОВТОРА»?

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