Назад | Перейти на главную страницу

Как я могу отследить причину завершения работы php-fpm?

У меня есть VPS (4 ядра, 6 ГБ), на котором работают centos, nginx и php-fpm, с очень небольшим трафиком (я никогда не публиковал URL-адрес).

Каждые несколько недель (в разное время) php-fpm завершается только следующим текстом в php-fpm.log:

[10-Nov-2015 04:14:48] NOTICE: Terminating ...
[10-Nov-2015 04:14:48] NOTICE: exiting, bye-bye!

На данный момент других событий в nginx error.log или php-fpm-error.log нет.

Вы можете использовать monit и его тест pid для перезапуска php-fpm при сбое и, при необходимости, получения электронного письма, когда это произойдет. Что-то вроде

set mail-format {
From: monit@host.name
Subject: $HOST $SERVICE $EVENT | $DATE
}

set alert your@email.address
check process php_fpm pidfile /var/run/php5-fpm.pid
 start program = "/etc/init.d/php5-fpm start"
 stop program = "/etc/init.d/php5-fpm stop"

Вышеупомянутое было написано с учетом Debian7, но вы также можете настроить его для CentOS.

Какую версию PHP вы используете? Вы пробовали обновиться до последней версии? Вы устанавливали его из rpm / deb или компилировали?

Можете ли вы проверить, работает ли в это время cron?

Это очень часто вызвано logrotate, пытающимся перезапустить службу.

В любом случае, чтобы предотвратить сбой службы, вы можете настроить monit, чтобы проверить, запущена ли служба, и перезапустить ее, если нет. Он также поддерживает уведомления по электронной почте, так что вы будете знать об этом.

Процессы PHP не особенно надежны, если их оставить на неопределенный срок. Вы должны настроить php-fpm для периодического перезапуска рабочих процессов. Попробуйте изменить

;pm.max_requests = 500

в

pm.max_requests = 500

для начала. Это может не исправить все, так как у вас могут быть другие проблемы с конфигурацией, но изменение max_requests - хорошее начало. Мой сервер работал несколько месяцев без простоев.

Отсюда