Я схожу с ума, пытаясь масштабировать 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
Итак, вещи, которые я пока исключил:
curr_connections
84 намного ниже максимального значения по умолчанию 1024)bytes
стат.Как мне диагностировать другие проблемы с оборудованием? prstat на самом деле не показывает много происходящего с точки зрения использования процессора или памяти. Не знаю, как определить сетевые проблемы, но поскольку это выделенный сервер в той же частной сети, что и веб-бокс, я не думаю, что это проблема с подключением (ping
между полями меньше миллисекунды).
Что-то еще мне здесь не хватает? Это сводит меня с ума.
Изменить: также забыл упомянуть, что я пробовал как постоянные, так и непостоянные соединения с минимальным влиянием.
Производительность Memcached может значительно снизиться, если он использует память подкачки. Если вы заметили, что на вашем сервере используется память подкачки, вы можете попробовать запустить memcached с -k
вариант.
Из: http://code.google.com/p/memcached/wiki/NewHardware#Avoid_Swapping
Избегайте обмена
Назначьте физическую память с дополнительными несколькими процентами серверу memcached. Не перегружайте память и ожидайте, что своп спасет вас. Производительность будет очень и очень плохой. Будьте особенно внимательны, чтобы отслеживать, использует ли ваш сервер подкачку, и при необходимости выполните настройку.
Я сменил операционную систему со SmartOS на Ubuntu, и проблема, похоже, решена. Не уверен, почему, но, похоже, это проблема между memcached и ОС.
Также убедитесь, что у вас действительно есть постоянные соединения, работающие так, как вы думаете. (Привет, мой первоначальный вопрос 6 лет назад ... все еще ❤️ вы ...)
Проблема заключалась в том, что вызывающая машина израсходовала весь свой ЦП, что приводило к сильной задержке его TCP-соединений. Масштабирование веб-уровня по горизонтали устранило проблему. Оказалось, что это вообще не проблема с memcached - именно здесь и проявились симптомы этой другой проблемы.