Nginx php-fpm забивается записью соединений под высокой нагрузкой

у нас есть Nginx / 1.6.2 работает с php5-fpm (5,6) на Debian 8 система.

В последние дни мы получили более высокую нагрузку, чем обычно, из-за того, что на наших серверах было больше пользователей. С большинством посетителей, приходящих в вечерние часы с 6 вечера до полуночи.

Спустя пару дней два разных сервера, на которых выполнялась вышеуказанная установка, показывали очень медленную скорость отклика в течение нескольких часов. В Мунине мы увидели, что там вдруг сотни соединений nginx в состоянии «запись» где раньше было только около 20 одновременно.

Мы не получаем никаких ошибок, кроме тайм-аут соединения на удаленных хостах при попытке доступа к этим серверам. Все логи, которые я видел, были просто нормальными.

Проблема может быть исправлена ​​перезапуском php5-fpm.

мой вопрос теперь: почему вдруг сотни процессов утверждают, что пишут? Есть какая-то известная проблема или, возможно, пропущен параметр конфигурации, который может вызвать это?

Вот полный список симптомы мы видим:

  • Вместо < 20 очень быстрых активных соединений / с мы видим от 100 до 900 соединений в состояние письма (все соединения nginx достигают php5-fpm, статические данные не обслуживаются этими серверами) Avg. Время выполнения сценария для сценариев php составляет 80 мс.
  • Проблема возникает, только если общее количество запросов / с nginx превышает 300 / с, затем оно падает с ~ 350 до ~ 250 запросов / с, но эти 250 показывают до 900 «записывающих» соединений
  • Многие из этих соединений в конечном итоге истекают и не дают правильного результата
  • В наших логах нет ошибок
  • Трафик eth / базы данных, а также загрузка ЦП соответствуют нижнему уровню 250req / s, к которому падает общее количество, поэтому «запись» не происходит на начальном этапе.

Для настройки:
как указано выше. Мы используем встроенный кэш опкодов Zend, APCu для кеша некоторых пользовательских переменных, один из серверов запускает экземпляр memcache (который отлично работает в течение всей проблемы), а другой — версию Redis, которая также работает нормально, пока проблема возникает.

Может ли кто-нибудь пролить свет на проблему?

Спасибо!

0

Решение

Мы нашли проблему: APCu кажется нестабильным с PHP 5.6.

Подробности:

  • Debian 8
  • Nginx / 1.6.2
  • PHP 5.6.14-0 + deb8u1
  • APCu 4.0.7 (редакция: 328290, 126M shm_size)

Мы использовали xhprof для профилирования запросов, когда сервер работал медленно (см. вопрос), и заметили, что APCu занимает> 100 мс на операцию чтения / записи. Очистка переменных APCu не помогла. Все остальные части кода имели нормальную скорость.

Мы полностью отключили использование APCu, и система была стабильной с тех пор.

Похоже, что эта версия APCu нестабильна при загрузке с PHP 5.6. По крайней мере, для нас.

0

Другие решения

У нас была та же проблема, и причина в том, что данные в Redis были больше, чем «maxmemory», поэтому redis не смог записать больше данных. Я мог войти в систему с помощью redis-cli, но не смог установить значение, если у вас возникла эта проблема, вы можете войти в redis с помощью redis-cli и попытаться установить что-то, если память redis заполнена, вы получите ошибку.

0

По вопросам рекламы [email protected]