1. In der /etc/php-fpm.conf
steht, dass ein PHP-FPM process neu gestartet wird bei 3 errors innherhalb von 1 Minute:
emergency_restart_threshold = 3
emergency_restart_interval = 1m
Als "Error" wird alles angesehen was sich in der /var/log/php-fpm/error.log
findet mit prefix ERROR
oder WARNING
, das lässt sich über log_level = error
anpassen, so dass nur noch `ERROR´ geloggt werden. Ansonsten werden auch solche standard Einträge als Error gelöscht:
[05-Jan-2018 21:04:17] WARNING: [pool www] server reached pm.max_children setting (28), consider raising it
Erläuterung: Nutzeraktionen logge ich in einem Objekt. Ein Log Objekt kann mehrere Handler zugewiesen bekommen die festlegen was mit dem Log passiert (z.B. StreamHandler -> für Log files, DiscordHandler und SlackHandler triggern cURL aufrufe um Logs nach Discord oder Slack zu pushen, MailHandler verschicken mails, DBHandler loggen einige Logs in MySQL,...). Wird kein Handler einem Log zugewiesen greift der default und logs werden über stdout ausgegeben. Das ist der Fehler! :)
Diese stdout ausgaben werden als ERROR von PHP-FPM geloggt weil in der /etc/php-fpm.conf
das eingestellt ist catch_workers_output = yes
Nach dem umstellen von log_level = notice
auf log_level = error
und dem fixen von Punkt 2. werden wirklich nur noch Fehler geloggt und die Prozesse laufen bis pm.max_requests = 300
erreicht ist.