Крот
Новичок
Привет.
Есть 2 абсолютно одинаковых сервера (Dell PowerEdge R720xd, 8 ядер с HT, 32Gb), которые стоят в одной стойке. На них стоит FreeBSD 9.2. На них крутится связка nginx + php-fpm (5.4), mysql, memcache, redis (всё на unix сокетах). Судя по haproxy у каждого из них session rate от 500 до 1500.
На них крутится php приложение, которое отдаёт рекламу. Схема работы приложения банально проста: ищем то, что надо в memcached, если нету, то ищем в mysql, кладем в memcached,
применяем алгоритмы, инкрементим счетчики в redis. Всё локально и достаточно шустро.
Не в пиковое время, судя по top'у с серверами всё отлично. la примерно от 6 до 10 (что для 8 ядер с HT я считаю нормально), в топах только php-fpm, изредка появляется mysql. Время отдачи 15-40мс.
В пиковое время (когда session rate ~ 1500) начинается какая-то ерунда:
Пробовал профилировать пхп во время пиковой нагрузки. Очень смутило 2 момента:
Возможно для рассуждения будет полезна информация:
Подскажите пожалуйста - в какую сторону копать дальше?
Спасибо!
UPD: Никаких кронов на сервере нет, которые бы выполняли трудоёмкие задачи, которые в свою очередь могли бы выбить сервер из привычного ритма.
Есть 2 абсолютно одинаковых сервера (Dell PowerEdge R720xd, 8 ядер с HT, 32Gb), которые стоят в одной стойке. На них стоит FreeBSD 9.2. На них крутится связка nginx + php-fpm (5.4), mysql, memcache, redis (всё на unix сокетах). Судя по haproxy у каждого из них session rate от 500 до 1500.
На них крутится php приложение, которое отдаёт рекламу. Схема работы приложения банально проста: ищем то, что надо в memcached, если нету, то ищем в mysql, кладем в memcached,
применяем алгоритмы, инкрементим счетчики в redis. Всё локально и достаточно шустро.
Не в пиковое время, судя по top'у с серверами всё отлично. la примерно от 6 до 10 (что для 8 ядер с HT я считаю нормально), в топах только php-fpm, изредка появляется mysql. Время отдачи 15-40мс.
В пиковое время (когда session rate ~ 1500) начинается какая-то ерунда:
- La подскакивает до небес, при этом в топе только php-fpm'ы, лишь изредка проскакивает mysql (hitrate у мемкэша ~ 85%)
- Если смотреть статсу по сокетам netstat -Lan, то видно, что у php-fpm выстраивается очередь. Ни у мускуля, ни у редиса, ни у мемкэша очереди нету.
- Cудя по топу ~50% памяти свободно.
- Ситуация одинаковая на обоих серверах.
Пробовал профилировать пхп во время пиковой нагрузки. Очень смутило 2 момента:
- Какая-то супер медленная работа автолоадера 60мс. (при этом php-fpm юзает zend optcache, по-идее с этим вообще проблем быть не должно).
- Медленный Memcached::get, при этом self time низкое, а вот total time (получение объекта + рассериализация) раз в 10 больше, чем self time. В качестве сериализатора используется Memcached::SERIALIZER_PHP. 99% объектов, которые храним в мемкэше - пыховские массивы.
Возможно для рассуждения будет полезна информация:
- Cпаунинг pm = ondemand
- Persistent соединение с Redis / Memcached
Подскажите пожалуйста - в какую сторону копать дальше?
Спасибо!
UPD: Никаких кронов на сервере нет, которые бы выполняли трудоёмкие задачи, которые в свою очередь могли бы выбить сервер из привычного ритма.
Последнее редактирование: