Finden Sie heraus, welches PHP-Skript auf jedem HTTPD-Prozess ausgeführt wird

7

Ich möchte wissen, wie HTTPD-Prozesse überprüft werden können, um festzustellen, welches PHP-Skript auf ihnen ausgeführt wird.

Ich habe bereits ein "netstat" erstellt und festgestellt, dass einige Prozesse DB- und Network-Sockets zu lange gespeichert haben, und jetzt möchte ich wissen, welche Skripte dies verursachen.

Übrigens benutze ich Linux.

LatinSuD
quelle

Antworten:

14

Das Apache-Modul muss mod_statusaktiviert sein (die Haupt-Apache-Konfigurationsdatei von CentO befindet sich unter /etc/httpd/conf/httpd.conf).

LoadModule status_module modules/mod_status.so

mit Option (dies muss in derselben Konfigurationsdatei wie oben eingestellt werden)ExtendedStatus on

# ExtendedStatus controls whether Apache will generate "full" status
# information (ExtendedStatus On) or just basic information (ExtendedStatus
# Off) when the "server-status" handler is called. The default is Off.
#
ExtendedStatus On

und einige dafür festgelegte Zugriffsrechte (unten XXX.XXX.XXX.XXXdurch Ihre IP ersetzen - diese befindet sich in derselben Konfigurationsdatei wie oben)

# Allow server status reports generated by mod_status,
# with the URL of http://servername/server-status
# Change the ".example.com" to match your domain to enable.
#
<Location /server-status>
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from localhost 127.0.0.1 XXX.XXX.XXX.XXX
</Location>

Schließlich sehen Sie, was jeder HTTPD-Prozess tut, indem Sie auf http: // Ihr Servername / Serverstatus zugreifen

Dies zeigt die Pids und URLs an, die derzeit auf die hier dargestellte Weise verarbeitet werden .

symcbean
quelle
Jemand hat dies heute positiv bewertet, also bin ich zurückgekommen, um mir anzusehen, was ich geschrieben habe. Überprüfen der Frage und meiner Antwort ... Ja, ich habe die Frage beantwortet, aber die Lösung des Problems wäre besser, wenn Sie% D protokollieren und die Daten analysieren.
Symcbean
6

Der vorgeschlagene mod_status ist eine großartige Alternative, um zu sehen, welcher Prozess was gerade tut. Sie aktivieren ihn (und fügen normalerweise Allow-Anweisungen hinzu, damit Sie ihn aus dem IP-Bereich anzeigen können, von dem aus Sie auf den Webserver zugreifen) und navigieren dann zu http://site.name/server-statusund werden nett Ausgabe. Ein Beispiel finden Sie auf der Apaches-Website: http://www.apache.org/server-status

Ein weiteres nützliches Tool, um zu sehen, was mit einem Prozess los ist lsof, ist , wenn Sie eine bekannte PID haben, die "hängt", können lsof -p <pid>Sie eingeben, um zu sehen, was mit diesem Prozess los ist. Um allen Prozessen zu entsprechen, können Sie etwas wie lsof -c apacheoder eingeben lsof -c httpd. Es ist ein sehr vielseitiges Tool mit vielen Optionen für das, was Sie sehen möchten.

Schließlich können Sie stracean laufende Prozesse anhängen, um zu sehen, was sie gerade mit Systemaufrufen usw. tun strace -p <pid>. Achtung, dies KANN manchmal den laufenden Prozess zum Stillstand bringen. Halten Sie also ein Auge offen und starten Sie es bei Bedarf neu.

lsof (8) Manpage: http://linux.die.net/man/8/lsof
strace (1) Manpage: http://linux.die.net/man/1/strace

Mattias Ahnberg
quelle
Zeigt lsof den Quelldateinamen an, wenn ein PHP-Cache verwendet wird?
Symcbean
Abhängig von der Implementierung und dem Öffnen / Halten von Dateien wäre strace detaillierter. Wenn Sie es mit -f (fork) aufrufen, folgt es auch untergeordneten Prozessen, die möglicherweise einen Webserver -> childprocess -> cache -> etc. aufrufen . Aber schwer genau zu sagen, ohne dass Sie damit spielen und es ausprobieren, um die Funktionen der Tools zu erlernen!
Mattias Ahnberg
Ich habe diesen Artikel bei der Suche unter Windows gefunden ... Natürlich lsofist er unter Windows nicht verfügbar. Falls also jemand auf die gleiche Weise hierher kommt
simonhamp
@symcbean Ich konnte es auf meinem Ubuntu-Server nicht sehen, aber die erste Datei war das aktuelle Verzeichnis, das mir zumindest sagte, dass es unsere Beta-Site war und somit sicher, einen betrügerischen Prozess zu beenden. Außerdem wurden die Verbindung zum Client (Browser) und die IP- / Socket-Details angezeigt.
Scipilot