Wie kann ich die Ressourcennutzung für PHP-Sites auf virtueller Hostbasis unter GNU/Linux überwachen?

Wie kann ich die Ressourcennutzung für PHP-Sites auf virtueller Hostbasis unter GNU/Linux überwachen?

Ausführen einer Reihe von PHP-Sites über Apache2.4/mod_php auf RHEL mithilfe des Prefork-MPM.

Meine Apache-Kinder verbrauchen ziemlich viel RAM und CPU.

Ich möchte die RAM-/CPU-Nutzung jedem virtuellen Host einzeln zuordnen können.

Eine Idee, die ich hatte, war, PHP-FPM zu verwenden und einen Worker-Pool pro virtuellem Host zu erstellen. Mir ist jedoch nicht klar, ob ich die Worker-Prozesse benennen oder taggen kann, damit ich Statistiken zur Ressourcennutzung auf sinnvolle Weise aggregieren kann.

Ich habe das Gefühl, dass große Shared Hosts dieses Problem schon einmal hatten.

Irgendwelche Ideen?

Antwort1

Mit prefork mod_php haben Sie mehr oder weniger keine Ahnung von der RAM-/CPU-Nutzung verschiedener virtueller Hosts. Das Problem ist, dass alle Apache-Prozesse unter demselben Benutzer laufen und jeder Prozess alle virtuellen Hosts bedient. Ein Prozess kann also in einem Moment vhostA und in einem anderen vhostB bedienen.

Um die Sache noch schlimmer zu machen, steigt bei Apache-Prozessen mit mod_php die RAM-Nutzung mit jeder bearbeiteten Anfrage, bis der Prozess MaxRequestPerChild-Anfragen bearbeitet, wonach er abgesetzt wird und ein neuer, kleiner und schlanker Prozess seinen Platz einnimmt. Daher ist es praktisch unmöglich, die Ressourcennutzung mit prefork/mod_php zu verfolgen.

Sie können ein Tool wie Apachetop verwenden, das das Zugriffsprotokoll analysiert, und die Art der Anfragen beobachten, die Apache bearbeitet. Das wird Ihnen zwar keine sehr detaillierten Ergebnisse liefern, aber Sie werden zumindest eine Art Muster erkennen. Das kann Ihnen helfen, wenn einer Ihrer virtuellen Hosts den gesamten Server überlastet.

Wenn Sie andererseits eine bessere Lösung wünschen, gibt es mehrere Möglichkeiten, dieses Problem anzugehen. Sie könnten Prefork gegen itk austauschen. mpm-itk ermöglicht es Ihnen, jeden virtuellen Host unter einer anderen UID/GID auszuführen – was wiederum Ihr Problem mit den Metriken für den Ressourcenverbrauch löst – Sie könnten beispielsweise einfach die RAM-Nutzung pro UID überwachen.

Eine andere Richtung ist PHP-FPM mit separatem Pool für jeden virtuellen Host. Dies trennt jedoch nur den PHP-Ressourcenverbrauch, Sie können immer noch nicht sehen, was Apache tut. Wenn Sie jedoch mod_php aus Apache-Prozessen entfernen, können Sie sie mit mpm-worker (Thread-Modell) ausführen, und die RAM-Nutzung von Apache wäre im Vergleich zu PHP wahrscheinlich vernachlässigbar. In Bezug auf die Prozessmarkierung können Sie sie einfach unter einer anderen UID ausführen.

verwandte Informationen