В настоящее время я настраиваю VPS (с VPS.NET), который я буду использовать для размещения блога и некоторых других вещей. Я установил nginx и пропатчил php (5.2.8) с помощью php-fpm.
Все работает отлично (и очень быстро!), За исключением одной досадной проблемы: поскольку на данный момент у веб-сайта нет другого трафика, кроме моего, через некоторое время он простаивает, все процессы php-cgi умирают. Как только я пытаюсь зайти на сайт, nginx возвращает хороший "502 плохой шлюз", и чтобы исправить это, мне нужно вручную перезапустите php-fpm, чтобы сайт снова заработал. Это почему? Я видел, что это какая-то обычная проблема, но после нескольких дней поиска решения в свободное время я не нашел ни одного, которое бы мне помогло.
Какие-либо предложения? заранее спасибо
Я использую очень похожую настройку (nginx 0.7.61, php + fpm 5.2.10), и мои процессы PHP никогда не умирают, даже после простоя.
Биты управления процессом моего php-fpm.conf следующие:
<value name="pm">
<value name="style">static</value>
<value name="max_children">3</value>
<value name="apache_like">
<value name="StartServers">20</value>
<value name="MinSpareServers">5</value>
<value name="MaxSpareServers">35</value>
</value>
</value>
<value name="request_terminate_timeout">0s</value>
<value name="request_slowlog_timeout">0s</value>
<value name="slowlog">logs/slow.log</value>
<value name="rlimit_files">1024</value>
<value name="rlimit_core">0</value>
<value name="chroot"></value>
<value name="chdir"></value>
<value name="catch_workers_output">yes</value>
<value name="max_requests">500</value>
Обратите внимание, что хотя у меня определены биты, подобные apache (они были частью конфигурации по умолчанию), они не используются, потому что у меня есть статический набор в стиле PM.
Вы можете поднять логи до уровня отладки, используя это в разделе глобальных опций:
<value name="log_level">debug</value>
чтобы узнать, есть ли заявленная причина закрытия рабочих.
Если это не сработает, можно исправить ситуацию, когда такая служба, как pingdom, будет запускать php на вашем сайте каждые x минут, но мой опыт работы с этой комбинацией программного обеспечения не предполагает, что это необходимо.
Не уверен, чем PHP-FPM отличается от стандартного PHP в режиме fastcgi, но обычно каждый процесс PHP будет обслуживать только ограниченное количество запросов перед завершением. Это предотвращает накопление утечек памяти со временем. Это работает очень хорошо, если у вас нет только одного процесса PHP, и в этом случае он выполняется, пока не завершит свою квоту запросов, а затем завершится. Вы должны посмотреть, работает ли у вас один процесс или несколько. Если у вас их несколько, не обращайте на это внимания. Если у вас только один, перед запуском PHP необходимо убедиться, что переменная среды PHP_FCGI_CHILDREN экспортирована. PHP_FCGI_MAX_REQUESTS контролирует количество запросов, запускаемых каждым отдельным процессом.