Laufende Prozesse identifizieren?

serv2003

New Member
Hallo und guten Morgen!

Ich bin leider kein Profi, hoffe aber, dass ich hier trotzdem richtig bin. Google konnte mir bei meiner Frage nämlich leider nicht helfen.

Meine Vorgeschichte:
Ich habe ein Hostingpaket bei 1&1. Darauf laufen diverse PHP-Skripte, die ich selbst programmiert habe.

Mein Problem:
In letzter Zeit beenden sich manche Prozesse anscheinend nicht mehr, wodurch die Kapazitätsgrenze meines Hostingspakets erreicht wird. Jetzt bin ich auf der Suche nach den Skripten, die den Fehler verursachen und möchte die Prozesse identifizieren.

Mein Vorgehen:
Ich logge mich per SSH auf dem Server ein und lasse mir mit dem Befehl "top" die laufenden Prozesse anzeigen. Die Liste zeigt, dass tatsächlich manchmal etliche PHP5-Prozesse parallel laufen, die jeweils schon mehr als 29,99 Sekunden ausgeführt werden. Ich kann die Prozesse auch entsprechend ihrer PID killen.

Meine Frage:
Wie finde ich raus, welche PHP-Skripte diese Prozesse auslösen? Kann ich irgendwie einer PID den Namen des Skriptes zuordnen? Oder sonst irgendwie sehen, welche PHP5-Prozesse das genau sind, die da parallel laufen?

Bin für jede Hilfe dankbar!
 
Top zeigt normalerweise die PID usw an, je nach Einstellung.

Ich nehme lieber htop, das ist übersichtlicher aber oft nicht installiert.

Der Befehl:

Code:
ps auxf | egrep  "PID|php"

könnte eine für Dich geeignete Ausgabe erzeugen.

Sieht dann bei mir so aus:


Code:
13611# ps auxf | egrep  "PID|php"
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
1088     32531  0.0  0.1 374940 49536 ?        S    10:11   0:13  |   \_ /usr/bin/php-cgi
k16600w1 32532  0.1  0.1 378184 47652 ?        S    10:11   0:23  |   \_ /usr/bin/php-cgi
k12800w1 32538  0.0  0.0 130600 27196 ?        S    10:11   0:06  |   \_ /opt/php52/bin/php-cgi
k16700w1 32541  0.4  0.1 374092 45808 ?        S    10:11   1:23  |   \_ /usr/bin/php-cgi
....
 
Last edited by a moderator:
Ja, genau das suche ich!

Prima, vielen Dank! Das hilft super!

Eine kurze Nachfrage noch: Es erscheinen immer nur die Prozesse, die auf dem Server aufgerufen worden sind, oder? Also cronjobs zum Beispiel.

Aber es wird nicht angezeigt, wenn gerade jemand per HTTP die Webseite aufruft und dadurch einen PHP-Aufruf startet, richtig?

Kann man das auch irgendwo einsehen, wie viele Prozesse gerade durch einen Homepage-Aufruf laufen? Muss man das überhaupt?
 
kommt drauf an, wie php bei Dir eingebunden ist.

Für sowas kannst Du aber ggf. die server-status-Seite vom Webserver anschauen.
 
Wenn die Prozesse tatsächlich bis zum manuellen Eingreifen endlos lange laufen, hat 1&1 irgendwie die Aufgabe verfehlt. Aber gut, zu deiner Frage: Mit lsof -p <PID> solltest du schon weiterkommen, da du gewissermaßen die "involvierten" Dateien aufspüren kannst. Bei vielen CMS & co. bin ich damit schon schnell ans Ziel gekommen. Ansonsten kannst du auch mal strace versuchen - ist aber nicht so angenehm zu lesen.

Edit: Ich habe natürlich einen Fehler gemacht. Mit strace kannst du sich nur als root an einen Prozess klemmen, sorry. lsof sollte aber laufen :)
 
Aber es wird nicht angezeigt, wenn gerade jemand per HTTP die Webseite aufruft und dadurch einen PHP-Aufruf startet, richtig?

Kann man das auch irgendwo einsehen, wie viele Prozesse gerade durch einen Homepage-Aufruf laufen? Muss man das überhaupt?

Die besseren Setups bearbeiten so, dass ein PHP-Prozess mehrere Abfragen behandelt, also durchaus länger im Speicher sein kann. Ohne Kenntnisse Deines Webserver/PHP-Setups kann man nur raten

Notiere Dir mal eine PID. am besten von einem User mit einer gut frequentierten Webseite und dann schau mal nach vielen Stunden, ob Du den Prozess noch findest.
 
Back
Top