Я использую memcached на своем сервере, и когда он достигает 600+ запросов в секунду, он становится нестабильным и вызывает большое количество проблем. Похоже, когда частота запросов становится такой высокой, мои PHP-приложения в случайное время не могут подключиться к серверу memcache, что вызывает медленное время загрузки, из-за чего nginx и php-fpm сходят с ума, и я получаю кучу 104: Сброс соединения одноранговым узлом ошибки в моих журналах nginx.
Я хотел бы отметить, что на моем сервере memcache у меня есть «горячие объекты» - объекты, которые время от времени получают 90% запросов memcache. Я также заметил, что когда так много запросов попадают в один объект, это немного увеличивает время загрузки для всей страницы (когда ей удается загрузиться).
Я был бы очень признателен за любую помощь в этой проблеме. Спасибо!
Это действительно похоже на проблему с сетевым уровнем. Когда вы столкнетесь с этой проблемой, можете ли вы получить вывод netstat -ano и увидеть, сколько соединений находится в определенных сегментах? Если вы видите тонну соединений, которые не в ESTABLISHED, а в TIME_WAIT / FIN_WAIT и т. Д., Вам, вероятно, нужно включить повторное использование и переработку времени ожидания. Из:
http://www.speedguide.net/articles/linux-tweaking-121
TCP_TW_REUSE Это позволяет повторно использовать сокеты в состоянии TIME_WAIT для новых соединений, когда это безопасно с точки зрения протокола. Значение по умолчанию - 0 (отключено). Как правило, это более безопасная альтернатива tcp_tw_recycle
echo 1> / proc / sys / net / ipv4 / tcp_tw_reuse (логическое значение, по умолчанию: 0)
Примечание. Параметр tcp_tw_reuse особенно полезен в средах, где открыты многочисленные короткие соединения и остаются в состоянии TIME_WAIT, например, на веб-серверах. Повторное использование сокетов может быть очень эффективным для снижения нагрузки на сервер.