Мы используем CentOS/nginx fastcgi_cache для кэширования запросов к файлам PHP на нашем сервере. Этот файл очень часто используется и также очень часто обновляется, поэтому он имеет кэш размером 1 с.
Обычно при просмотре журнала доступа мы видим что-то вроде этого:
00:01 REQUEST 1 "EXPIRE"
00:01 REQUEST 2 "HIT"
00:01 REQUEST 3 "HIT"
00:02 REQUEST 4 "EXPIRE"
00:02 REQUEST 5 "HIT"
00:02 REQUEST 6 "HIT"
Когда возникает проблема, что-то происходит с nginx, и внезапно журнал начинает выглядеть следующим образом (все устаревают, даже если это происходит в одну и ту же секунду):
00:01 REQUEST 1 "EXPIRE"
00:01 REQUEST 2 "EXPIRE"
00:01 REQUEST 3 "EXPIRE"
00:02 REQUEST 4 "EXPIRE"
00:02 REQUEST 5 "EXPIRE"
00:02 REQUEST 6 "EXPIRE"
Важное примечание: как раз перед тем, как это произойдет, php-fpm сообщает: ПРЕДУПРЕЖДЕНИЕ: сервер [pool www] достиг значения max_children (35), рассмотрите возможность его увеличения УВЕДОМЛЕНИЕ: завершение работы ... УВЕДОМЛЕНИЕ: выход, пока-пока! УВЕДОМЛЕНИЕ: fpm запущен, pid 27544 УВЕДОМЛЕНИЕ: готов к обработке подключений
(Это ненормальное поведение и встречается очень редко)
Я пробовал перезапускать php-fpm в процессе работы, чтобы посмотреть, влияет ли это на кэш — ничего не вышло. Я также пробовал проводить стресс-тестирование определенных файлов, которые часто вызываются, и не могу заставить систему сойти с ума. Также проверил, что ключ кэша настроен правильно.
У кого-нибудь есть идеи, какие еще возможности здесь существуют? Что-нибудь еще, на что я могу обратить внимание?
P.S. Чтобы исправить это, мы останавливаем запросы на файл и перезапускаем службу, и все снова работает.
Спасибо за помощь, Алон.