Während das vorgestellte Access-Log sämtliche Anfragen aufzeichnet, landen im Slow-Log alle Anfragen, für die der PHP-Interperter zu lange benötigt hat. PHP-FPM führt ein solches Slow-Log für einen Pool, wenn man in der zugehörigen Konfigurationsdatei folgende Zeile ergänzt:
slowlog = /var/log/$pool.log.slow
»$pool
«
steht wieder für den Pool-Namen. Die folgende Zeile:
request_slowlog_timeout = 30s
legt dann noch fest, wann eine Anfrage zu lange in der Bearbeitung ist. In diesem Fall würde PHP-FPM eine Anfrage genau dann im Slow-Log vermerken, wenn ein PHP-Interpreter auch nach über einer halben Minute noch keine Antwort geliefert hat (Abbildung 7). Alternativ zu »s
«
für Sekunden kann man die Zeit auch in Minuten (Kürzel »m
«
), Stunden (»h
«
) und Tagen (»d
«
) angeben.
Seine eigenen Probleme und interne Fehler schreibt PHP-FPM übrigens standardmäßig in die Datei »/var/log/php5-fpm.log
«
. Darin findet man auch Hinweise auf fehlerhafte Konfigurationsdateien.
Wer sich um die Sicherheit seines Webservers schert, kann alle Interpreter-Prozesse eines Pools in eine sogenannte Chroot-Umgebung stecken. Dazu genügt die Zeile:
chroot = /mein/gefaengnis
in der Konfigurationsdatei des Pools. Hinter dem Gleichheitszeichen steht der absolute Pfad, der dann für die Prozesse zum neuen Root-Verzeichnis wird – in diesem Beispiel »/mein/gefaengnis
«
.
Den aktuellen Gesundheitszustand eines Pools kann man über eine spezielle Status-URL abfragen. Dazu ergänzt man in der Pool-Konfiguration (aus Listing 1) die Zeile:
pm.status_path = /status
Damit erfährt man später unter http://www.example.com/status unter anderem, ob die Prozesse des Pools gerade laufen und wie viele Anfragen sie bereits beantwortet haben. Standardmäßig liefert PHP-FPM die Informationen als reinen Text zurück. Man kann sie sich aber auch in HTML oder XML verpacken lassen. Dazu hängt man einfach an die URL ein »?html
«
beziehungsweise »?xml
«
an. Mit der Zeile:
ping.path = /ping
kann man später unter http://www.example.com/ping schnell prüfen, ob der Pool läuft. In diesem Fall gibt PHP-FPM ein schlichtes »pong
«
zurück. Doch Vorsicht: Nach diesen Informationen lecken sich auch Angreifer die Finger. Man sollte die Funktion daher im produktiven Betrieb möglichst deaktiviert lassen oder zumindest den Zugriff durch den Webserver einschränken.
Wenn ein Interpreter-Prozess zu lange an einem PHP-Script knabbert, beendet PHP-FPM ihn automatisch. Nach wie vielen Sekunden, legt in der Konfigurationsdatei »/etc/php5/fpm/php-fpm.conf
«
die folgende Zeile fest:
process_control_timeout = 10s
Reagiert hier ein Prozess 10 Sekunden lang nicht, beendet PHP-FPM ihn automatisch. Auch hier gelten wieder die Abkürzungen »m
«
für Minuten, »h
«
für Stunden und »d
«
für Tage.