Ich schätze, dass es nicht immer passt, mod_status immer verfügbar zu haben, aber es und apachetop sind die besten Möglichkeiten, diese Probleme zu diagnostizieren. Es gibt jedoch viele Möglichkeiten, eine Katze zu häuten.
Dieser Trick ist unter verschiedenen Umständen nützlich und nicht nur Apache-spezifisch. Es hängt jedoch von einer Reihe von Faktoren ab, und Sie müssen wissen, was es tut, um die Einschränkungen zu kennen.
for pid in `pgrep -u www-data`; do find /proc/${pid}/cwd -printf "%l\n" ; done
Lassen Sie es uns zusammenfassen:
- pgrep -u www-data gibt Ihnen die Liste der Pids an, die unter den www-Daten des Benutzers ausgeführt werden. Dies ist die Standardeinstellung unter Debian / Ubuntu. Passen Sie sie an Ihr eigenes System an (RedHat-basierte Systeme verwenden beispielsweise httpd als Benutzer). Für Systeme ohne pgrep können Sie ps axuwww | verwenden grep user | awk '{print $ 2}'
- das * für; tun; ... done * loop bedeutet, dass wir jeden Eintrag durchlaufen, in dem die Befehle im do-Teil der Schleife ausgeführt werden.
- find / proc / $ {pid} / cwd -printf "% l \ n" sucht / proc einfach nach jeder dieser PIDs und spuckt das aktuelle Arbeitsverzeichnis für diesen Prozess aus. Apache sendet standardmäßig chdir () an den VirtualHost, wenn Dateien von diesem VirtualHost bereitgestellt werden. / proc / PID / cwd ist eine symbolische Verknüpfung zu dem Verzeichnis, in dem der Apache-Prozess ausgeführt wird. printf "% l \ n" druckt den Endpunkt zu dieser Verknüpfung. Weitere Informationen hierzu finden Sie unter find (1).
Dieser Trick hat zwei wesentliche Vorbehalte:
1) Wenn etwas, das unter demselben Kontext wie der Apache-Prozess ausgeführt wird, ein chdir () außerhalb des VirtualHost-Verzeichnisses ausführt, ist es schwierig, dies herauszufinden.
Beispiel: Ein PHP-Skript, das unter mod_php ausgeführt wird (ein CGI unterscheidet sich von einem separaten Prozess in Apache Fork, aber ich gehe davon aus, dass CGIs kein Problem darstellen oder dass Sie sie einfacher verfolgen können).
2) Wenn Sie Apache-Instanzen haben, die sehr, sehr schnell Seiten bedienen (z. B. eine kleine statische HTML-Seite). Dies ist normalerweise kein Problem, aber es kann möglich sein. Wenn Sie viele Fehler "Keine solche Datei oder kein solches Verzeichnis" erhalten, ist dies im Grunde eine Manifestation davon. Ich würde einige erwarten, aber nicht die Mehrheit, es sei denn, sie passen zu diesem speziellen Fall. Grundsätzlich liegt dies daran, dass die Apache-Prozesse, die Sie mit ps gescannt haben, bereits beendet sind, als Sie / proc überprüft haben. Dies bedeutet natürlich, dass sie Seiten sehr, sehr schnell bereitstellen.
In Bezug auf speichergebundene Apache-Prozesse verwende ich ps_mem.py , um die Speichernutzung auf meinen Webservern zu berechnen. Wenn Sie große Apache-Prozesse (in Bezug auf die Größe des residenten Speichers) haben und diese schnell beendet werden, entspricht dies in etwa der Aufforderung eines großen, fetten Mannes, weiterhin 100-m-Sprints auszuführen. Wenn Ihr Webserver kein freigegebener ist, sind diese Fehler "Keine solche Datei oder kein solches Verzeichnis" normalerweise gute Kandidaten, um Inhalte auf einen kleineren, leichtgewichtigen Webserver (z. B. nginx / lighttpd) zu verschieben oder Inhalte (z. B. Lack / Tintenfisch) stark zwischenzuspeichern.