RAID-Technologie verspricht höhere Performance und mehr Sicherheit beim permanenten Speichern von Daten. Die ADMIN-Redaktion gibt einen Überblick über ... (mehr)

Optimierer

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.

Abbildung 7: Wie dieses Slow-Log aufdeckt, verhindert eine sleep()-Anweisung in info.php die zügige Verarbeitung der Anfrage.

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.

Schwedische Gardinen

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.

Ähnliche Artikel

comments powered by Disqus

Artikel der Woche

Eigene Registry für Docker-Images

Wer selber Docker-Images herstellt, braucht auch eine eigene Registry. Diese gibt es ebenfalls als Docker-Image, aber nur mit eingeschränkter Funktionalität. Mit einem Auth-Server wird daraus ein brauchbares Repository für Images. (mehr)
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Google+

Ausgabe /2020