Lange Apache Prozesse

Sonya*

New Member
Hallo zusammen,

eine kurze Frage, wie kriege ich raus von welchen Skripten einer PID von Apache gerade gebracht wird? Ich habe lang laufende Prozesse (s. Anhang), weiß aber nicht von welchen Skripten diese verursacht werden.

Danke im voraus,
Sonya
 

Attachments

  • top3.gif
    top3.gif
    11.9 KB · Views: 134
Roger,
vielen Dank! Ich habe das Tool auf dem Server installiert, es sieht sehr interessant aus und ich werde es bestimmt öfter in einem anderen Zusammenhang gebrauchen.

Leider sehe ich in der Ausgabe nicht Apache PID, so dass ich immer noch nicht sagen kann, welcher Skript / Datei den Prozess hält. Ist es mit dem Tool möglich?

Sonya
 
ApacheTop erhält seine Daten anhand von Logfiles. Ist also für "Realtime Fragen" nicht brauchbar.
Nutze also mod_status mit "ExtendedMode On".

huschi.
 
ApacheTop erhält seine Daten anhand von Logfiles. Ist also für "Realtime Fragen" nicht brauchbar.
Nutze also mod_status mit "ExtendedMode On".
Danke für Deine Antwort. Ich nutze bereits server_status Link auf meinem Server. Es hilft mir aber nicht weiter. Ich erkläre warum:
Wenn ich in -top Ausgabe einen lang laufenden Prozess sehe, dann schaue ich unter server_status welcher Skript der PID von diesem Prozess zugewiesen wird. Dabei aktualisiert sich server_status alle 2 Sekunden. Nun sehe ich alle zwei Sekunden einen anderen Skript, der gerade die betroffene PID "nutzt". Manchmal steht da server_status selbst als zugewiesene URL.
Daher bleibt für mich immer noch die Frage: wie kann ich feststellen, welcher Skript lang laufenden Prozess verursacht? Ist es überhaupt möglich?

Vielen Dank für Eure Hilfe!
 
Nach meiner Definition wechselt ein "lang laufender Prozess" nicht alle 2 Sekunden die PID.
Falls Du eine andere Definition davon hast, solltest Du uns etwas genauer erklären, was Du damit meinst.

huschi.
 
Nach meiner Definition wechselt ein "lang laufender Prozess" nicht alle 2 Sekunden die PID.
Falls Du eine andere Definition davon hast, solltest Du uns etwas genauer erklären, was Du damit meinst.
Entschuldige, dass ich mich so unverständlich ausdrücke. Ich versuche es nochmal:
In -top Ausgabe sehe ich einen Apache-Prozess, der bereits über 2 Minuten läuft, darauf hin schaue ich mir die PID von diesem Prozess im server-status. Hier wechseln sich in der Zeile mit der "langen" PID immer wieder verschiedene URLs ab. Das heißt, die PID wechselt gar nicht, sondern bleibt stehen (über 2 Minuten lang) und verarbeitet aber alle 2 Sekunden einen anderen Skript.
Für mich ist es wichtig die Ursache für diese lange PID-Zeit rauszufinden. Mein Webhoster meinte, es wäre ein Skript, der den Prozess hält, aber welcher?
 
Ich habe lang laufende Prozesse (s. Anhang), weiß aber nicht von welchen Skripten diese verursacht werden.

Ich wage mal einen Blick in meine Kristallkugel und behaupte ganz frech, dass die beiden lang laufenden apache Prozesse einfach der Apache an sich sind. Wann hast du ihn (=Apache) denn neu gestartet? Es wird ja nicht für jeden Aufruf ein neuer Prozess gestartet(*).

Bitte korrigiert mich, wenn ich falsch liege, aber die Spalte "TIME+" gibt doch nur an wieviel Prozesserzeit der Prozess seit seinem Start verbraucht hat. Mein mysqld schlummert derzeit zB bei "38:36.97".

lg
Paul

(*) nur zur Vereinfachung, mir ist schon klar dass man einstellen kann wieviele zumindest da sind, wieviele zusätzlich gestartet werden etc.
 
die beiden lang laufenden apache Prozesse einfach der Apache an sich sind. Wann hast du ihn (=Apache) denn neu gestartet?
Der Apache war am Vortag zum letzten Mal neu gestartet. Das heißt, dass der Screenshot 1 Tag nach dem Neustart gemacht wurde.
Es wird ja nicht für jeden Aufruf ein neuer Prozess gestartet(*).
Ich gehe davon aus, dass pro Skript ein Prozess gestartet wird (Apache 1.3 prefork). Mein Webhoster hat mich auf das Problem von "lang laufenden Prozessen" selbst hingewiesen. Also, wird es seiner Meinung nach etwas Auffälliges sein, wenn er es schon an mich weiter trägt.
Bitte korrigiert mich, wenn ich falsch liege, aber die Spalte "TIME+" gibt doch nur an wieviel Prozesserzeit der Prozess seit seinem Start verbraucht hat.
Das stimmt, aber nicht für Kind-Prozesse von Apache. Die sollten laut meinem Webhoster nach der Ausführung des Scriptes verschwinden und wenn nicht, dann liegt da ein Problem, also ein lang laufender Skript, der den Prozess "hält" vor.
Leider habe ich auf dem Gebiet auch nur Halbwissen. Und weiß nicht inwiefern die Aussage stimmt, ich verlasse mich einfach darauf, was der Webhoster sagt, hmmm....
 
Code:
lsof -p<pid>
Gibt alle geöffneten Files eines Prozesses aus.
Danke schön. Das habe ich auch schon probiert. Bei der lsof-Ausgabe erscheint ein Liste mit geladenen Apache Modulen, access_log, error_log, etc. Ich sehe da zur keinem Zeitpunkt irgendeinen Eintrag aus dem wwwroot-Verzeichnis, der auf einen Skript hinweisen könnte. Da die Prozesse lange laufen, habe ich die Möglichkeit lsof-Ausgabe n-Mal hinter einander auszuführen. Aber da ändert sich nichts. :confused: Vielleicht ist der Hinweis auf den Fehler irgendwo in der lsof-Ausgabe "versteckt" und es kommt gar nicht aus dem wwwroot-Verzeichnis. In meinen Skripte greife ich nicht explizit auf irgendetwas außerhalb des wwwroots, aber vielleicht geschiet es implizit? Ich kann heute abend die lsof- Ausgabe von einem langen Prozess hier posten, wenn es hilft.
 
Last edited by a moderator:
Ich gehe davon aus, dass pro Skript ein Prozess gestartet wird (Apache 1.3 prefork).
Nein, das ist falsch. Wie man schon am Namen "prefork" erkennt, handelt es sich um ein Prozess, der sich vorher (==pre) spaltet (==fork). D.h. der Apache macht sich beim Starten bereits bereit mehrere Anfragen parallel abzuarbeiten und startet sich daher vorsorglich mehrfach. Wie viele Threads/Childs und wie viele Request jeweils ein Child abarbeitet steht in der Konfiguration.

D.h. jeder Child verarbeitet mehrere Anfragen nacheinander.
Ein Script welches den Apache lange bindet, bleibt also auch lange im mod_status sichtbar.

Mein Webhoster hat mich auf das Problem von "lang laufenden Prozessen" selbst hingewiesen.
Hast Du den genauen Wortlaut noch parat? (Email, Brief, Fax...?)

Das stimmt, aber nicht für Kind-Prozesse von Apache. Die sollten laut meinem Webhoster nach der Ausführung des Scriptes verschwinden
Wie bereits oben ausgeführt, schein Dein Webhoster nicht viel Ahnung zu haben.

huschi.
 
Nein, das ist falsch. Wie man schon am Namen "prefork" erkennt, handelt es sich um ein Prozess, der sich vorher (==pre) spaltet (==fork). D.h. der Apache macht sich beim Starten bereits bereit mehrere Anfragen parallel abzuarbeiten und startet sich daher vorsorglich mehrfach. Wie viele Threads/Childs und wie viele Request jeweils ein Child abarbeitet steht in der Konfiguration.

D.h. jeder Child verarbeitet mehrere Anfragen nacheinander.
Ein Script welches den Apache lange bindet, bleibt also auch lange im mod_status sichtbar.
Danke für die ausführliche Erklärung. Nach all meinen Forschungsversuchen komme ich auch eher darauf, dass die Prozesse von Apache selbst am Leben erhalten werden und nicht von einzelen Skripten.

Hast Du den genauen Wortlaut noch parat? (Email, Brief, Fax...?)
Ja, habe ich, hier ist der Hinweis aus der Mail:
Wenn man aktuell in Top schaut, sieht man z.B folgende Prozesse:

30116 wa6402 20 0 40476 21m 5304 S 13 2.2 21:15.49 apache
30473 wa6402 20 0 39016 20m 5352 S 7 2.1 21:23.75 apache


also 2 Apache Prozesse, welche schon mehr als 20 Minuten laufen.
Hier sollte man prüfen, was diese Prozesse machen. Dann auf einmal sieht man dann eine ganze Seite voller Apacheprozesse, was im gesamten eine CPU und Ram Auslastung zu 100% bringt. Solche schwunghaftige Anstiege weisen in der Regel auf eine Endlosschleife hin.

Die Laufzeit der Prozesse sowie auch der Speicherverbrauch können wir global regeln. Falls Sie das wünschen, können wir das gerne machen
Ich muss dazu sagen, dass ich seit dieser Mail schon einige Skript-Optimierung und DB-Tuning auf dem Server durchgeführt habe und sehe auch keine Prozesse mehr, die länger als 3 Minuten laufen. Aber Endlosschleife gab es da vom Anfang an keine.

Wie bereits oben ausgeführt, schein Dein Webhoster nicht viel Ahnung zu haben.
Oder ich :) Vielleicht gebe ich nur seine Gedanken falsch weiter. Bis jetzt war ich mit ihm sehr zufrieden. Nur seit dem es Performance-Probleme auf dem Managed Server gibt, fühle ich mich etwas im Stich gelassen.

Ungefähr so, als wenn ich mit einem Wartungsvertrag in einer Werkstatt mit meinem Auto fahren würde und es wird mir gesagt, dass am Auto etwas im Motorraum nicht stimmt. Dabei aber nicht gesagt was genau und auch keine Reparatur durchgeführt. Es mag aber auch sein, dass ich den Gedanken von "Managed Server" mißverstehe und so was auch nicht dazu gehört.
 
Also ich nehme mal Deinen Hoster auseinander:

also 2 Apache Prozesse, welche schon mehr als 20 Minuten laufen.
Zum einen (wie oben schon ausgeführt): normal!
Allerdings laufen die Prozesse nicht "seit 20 Minuten" sondern haben in ihrer gesamten Laufzeit "20 Minuten CPU-Zeit verbraucht".
Kurze Rechnung zur Verständnis:
Wenn ein Prozess seit 20 Minuten läuft und eine CPU-Zeit von 20 Minuten hat, dann läuft er wirklich auf 100% Prozessor-Last.
Wenn ein Prozess aber nur 50% CPU-Leistung verbraucht und eine CPU-Zeit von 20 Min. angezeigt wird, läuft dieser also bereits 40 Minuten.
Und wenn ein Prozess im Schnitt nur 1% CPU braucht und schon 20 Min. CPU-Zeit gesammelt hat, lief dieser Prozess bereits...?

Dann auf einmal sieht man dann eine ganze Seite voller Apacheprozesse
Da fehlt die Definition von "Seite". Ich nehme an es soll eine Einheit von "viele Prozesse" sein. Um entscheiden zu können, ob es wirklich viele sind, bräuchte man die genaue Definition. :)

was im gesamten eine CPU und Ram Auslastung zu 100% bringt.
Ja und? Wenn viele Prozesse gleichzeitig Arbeiten kann das schon Normal sein. Vor allem, wenn auch noch eine Datenbank mit im Spiel ist.

Solche schwunghaftige Anstiege weisen in der Regel auf eine Endlosschleife hin.
Eine Endlosschleife in einem Script soll gleich mehrere Apache-Prozesse belegen?
Sorry, aber da hat jemand noch nicht mal den Hauch einer Ahnung und widerspricht sich letztlich selber.

huschi.
 
Und wenn ein Prozess im Schnitt nur 1% CPU braucht und schon 20 Min. CPU-Zeit gesammelt hat, lief dieser Prozess bereits...?
2000 Min ~ 83 Stunden :)

Ja und? Wenn viele Prozesse gleichzeitig Arbeiten kann das schon Normal sein. Vor allem, wenn auch noch eine Datenbank mit im Spiel ist.
Ja, da sind sogar mehrere Datenbanken und eine davon ist "schon" 600 MB als nicht gepackte SQL-Dump groß :)

Eine Endlosschleife in einem Script soll gleich mehrere Apache-Prozesse belegen?
Sorry, aber da hat jemand noch nicht mal den Hauch einer Ahnung und widerspricht sich letztlich selber.
Danke schön, ich glaube, dass ich jetzt mit der mehrtätigen Suche aufhören kann. Ich war schon am Rande der Verzweiflung, weil ich es einfach nicht verstanden habe und wohl nach einem Problem gesucht habe, wo es keins gab.

Wie auch immer: vielen vielen Dank für Deine Hilfe und einen dicken Kuß von einer Interdame aus dem Rheinland :)
 
Last edited by a moderator:
Back
Top