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

Что может привести к зависанию Memcached на 2+ секунды?

Я схожу с ума, пытаясь масштабировать memcached. Со своего сайта:

Почти все операции с Memcached выполняются за O (1). Подключение к нему и выдача команды get или stat никогда не должны отставать. Если подключение задерживается, возможно, вы достигли максимального количества подключений. См. ServerMaint для получения подробной информации о отслеживаемой статистике.

Если выдача команд задерживается, у вас может возникнуть ряд проблем с настройкой. Наиболее распространены проблемы с оборудованием, нехватка оперативной памяти (подкачка), проблемы с сетью (пропускная способность, отброшенные пакеты, полудуплексные соединения). В редких случаях могут способствовать ошибки ОС или ошибки memcached.

Ну .. это определенно не работает для меня как операция O (1). При низкой и нормальной нагрузке на нашем сайте время отклика memcached для операций получения и установки составляет около 0,001 секунды. Неплохо. Но если мы утроим нагрузку, мы получим выбросы, которые занимают в 100 раз (или в редких случаях 1000 раз!) Больше времени. У меня даже был один случай, когда memcached сохранял значение за 2,2442 секунды.

Очевидно, это убивает наш сайт.

Вот результат Memcached-> getStats во время одного из медленных периодов:

        [pid] => 18079
        [uptime] => 8903
        [threads] => 4
        [time] => 1332795759
        [pointer_size] => 32
        [rusage_user_seconds] => 26
        [rusage_user_microseconds] => 503872
        [rusage_system_seconds] => 125
        [rusage_system_microseconds] => 477008
        [curr_items] => 42099
        [total_items] => 422500
        [limit_maxbytes] => 943718400
        [curr_connections] => 84
        [total_connections] => 4946
        [connection_structures] => 178
        [bytes] => 7259957
        [cmd_get] => 1679091
        [cmd_set] => 351809
        [get_hits] => 1662048
        [get_misses] => 17043
        [evictions] => 0
        [bytes_read] => 109388476
        [bytes_written] => 3187646458
        [version] => 1.4.13

Итак, вещи, которые я пока исключил:

Как мне диагностировать другие проблемы с оборудованием? prstat на самом деле не показывает много происходящего с точки зрения использования процессора или памяти. Не знаю, как определить сетевые проблемы, но поскольку это выделенный сервер в той же частной сети, что и веб-бокс, я не думаю, что это проблема с подключением (ping между полями меньше миллисекунды).

Что-то еще мне здесь не хватает? Это сводит меня с ума.

Изменить: также забыл упомянуть, что я пробовал как постоянные, так и непостоянные соединения с минимальным влиянием.

Производительность Memcached может значительно снизиться, если он использует память подкачки. Если вы заметили, что на вашем сервере используется память подкачки, вы можете попробовать запустить memcached с -k вариант.

Из: http://code.google.com/p/memcached/wiki/NewHardware#Avoid_Swapping

Избегайте обмена

Назначьте физическую память с дополнительными несколькими процентами серверу memcached. Не перегружайте память и ожидайте, что своп спасет вас. Производительность будет очень и очень плохой. Будьте особенно внимательны, чтобы отслеживать, использует ли ваш сервер подкачку, и при необходимости выполните настройку.

Я сменил операционную систему со SmartOS на Ubuntu, и проблема, похоже, решена. Не уверен, почему, но, похоже, это проблема между memcached и ОС.

Также убедитесь, что у вас действительно есть постоянные соединения, работающие так, как вы думаете. (Привет, мой первоначальный вопрос 6 лет назад ... все еще ❤️ вы ...)

Проблема заключалась в том, что вызывающая машина израсходовала весь свой ЦП, что приводило к сильной задержке его TCP-соединений. Масштабирование веб-уровня по горизонтали устранило проблему. Оказалось, что это вообще не проблема с memcached - именно здесь и проявились симптомы этой другой проблемы.