Page 1 of 1

TOP - httpd - details zum Prozess anzeigen?

Posted: 2003-03-05 10:35
by kwik
Top zeigt mir folgendes:

Code: Select all

 10:21am  up 241 days, 22:46,  1 user,  load average: 1.55, 1.59, 1.46
82 processes: 79 sleeping, 2 running, 1 zombie, 0 stopped
CPU states: 94.8% user,  5.3% system,  0.0% nice, 853870.0% idle
Mem:   248028K av,  213656K used,   34372K free,       0K shrd,    2532K buff
Swap:  787176K av,  103856K used,  683320K free                   87992K cached

  PID USER     PRI  NI  SIZE  RSS SHARE STAT %CPU %MEM   TIME COMMAND
10745 wwwrun    18   0 25212  18M 16488 R    76.9  7.5  92:37 httpd
11196 wwwrun     9   0 16364 9840  7956 S     7.5  3.9   1:37 httpd
11899 wwwrun     9   0 15728 9236  7348 S     5.3  3.7   1:32 httpd
13953 wwwrun     9   0 16340 9988  4480 S     2.7  4.0   1:01 httpd
10823 mysql      9   0 20644  16M 15980 S     2.1  6.9  17:26 mysqld
19112 root      11   0   960  960   740 R     0.5  0.3   0:01 top
16150 wwwrun     9   0 15944 9572  4468 S     0.1  3.8   0:33 httpd
...
D.h. einer von meinen httpds verbraucht 76,9% (geht hoch bis 98% wenn er mehr bekommen kann), anderen httpd weniger. Wie kann ich nun herausfinden, was dieser eine Prozess genau macht um zu sehen, warum gerade der so viel Resourcen verbraucht?

Meine httpd-conf (Auszug):

Code: Select all

Timeout 300
KeepAlive On
MaxKeepAliveRequests 1500
KeepAliveTimeout 5
MinSpareServers 5
MaxSpareServers 5
StartServers 5
MaxClients 100
MaxRequestsPerChild 10000
Danke im Voraus ;)

Re: TOP - httpd - details zum Prozess anzeigen?

Posted: 2003-03-05 10:42
by [tom]
Kwik wrote:

Code: Select all

CPU states: 94.8% user,  5.3% system,  0.0% nice, 853870.0% idle
Ich frag mich eher, wie TOP die Idle-Time bei Dir ermittelt.

Und dann hast Du noch ein Zombie. Wegen dem httpd: Ist das immer so (ständig) oder nur zwischendurch mal?

[TOM]

Re: TOP - httpd - details zum Prozess anzeigen?

Posted: 2003-03-05 11:02
by kwik
Ist erst seit heute, ich habe allerdings gestern an der httpd.conf rumgespielt. Den Server dann aber einige Stunden beobachtet und nichts entdeckt. Der httpd bleibt die ganze Zeit so fordernd und nimmt sich alles, was er kriegen kann...

idle spinnt. Meistens richtig, zwischendrin dann dieser komische Wert für einen Anzeigeintervall.

Zombie ist auch httpd:

Code: Select all

 10:59am  up 241 days, 23:24,  1 user,  load average: 1.12, 1.32, 1.34
103 processes: 97 sleeping, 3 running, 3 zombie, 0 stopped
CPU states:  0.1% user,  0.0% system,  0.1% nice,  0.0% idle
Mem:   248028K av,  206404K used,   41624K free,       0K shrd,    2728K buff
Swap:  787176K av,  103848K used,  683328K free                   78192K cached

  PID USER     PRI  NI  SIZE  RSS SHARE STAT %CPU %MEM   TIME COMMAND
10745 wwwrun    17   0 25212  18M 16488 R    94.2  7.5 125:41 httpd
20646 root      13   0   952  948   728 R     3.8  0.3   0:00 top
20633 wwwrun     9   0     0    0     0 Z     1.9  0.0   0:00 httpd <defunct>
Ne Idee?

Re: TOP - httpd - details zum Prozess anzeigen?

Posted: 2003-03-05 11:15
by captaincrunch
Wenn du ganz genau wissen willst, was der Prozess macht, hilft dir strace -p{PID} weiter. Dort wirst du dann sämtliche Syscalls und sonstiges durchrattern sehen. Genauer geht's eigentlich kaum ... :wink:

Re: TOP - httpd - details zum Prozess anzeigen?

Posted: 2003-03-05 11:42
by kwik
Danke!

Aber wenn ich mir damit PID 10745 anschaue kommt gar nichts rüber. Bei allen anderen httpd-PIDs schon. Jetzt kann ich natürlich einfach den apache neu starten und das Problem ist gelöst. Aber die Ursache nicht. Wie könnte ich dahinter kommen?

Re: TOP - httpd - details zum Prozess anzeigen?

Posted: 2003-03-05 11:46
by captaincrunch
Auch ein Apache-Prozess kann sich mal aufhängen. Wirklich rausfinden wirst du das wohl nur dadurch können, dass du den Prozess mit einem Signal killst, das den Prozess veranlasst, einen coredump zu schreiben. Wenn du den analyiserst, wirst du dahinterkommen.

Meine Empfehlung : starte den Indianer neu, und beobachte das ganze ein bisschen. Wenn's nicht wieder auftritt, würde ich mir keine großen Gedanken darum machen.

Re: TOP - httpd - details zum Prozess anzeigen?

Posted: 2003-03-05 11:47
by cyberline
CaptainCrunch wrote:Wenn du ganz genau wissen willst, was der Prozess macht, hilft dir strace -p{PID} weiter. Dort wirst du dann sämtliche Syscalls und sonstiges durchrattern sehen. Genauer geht's eigentlich kaum ... :wink:
strace gibts nur unter Suse ?
gibts sowas für redhat ?

Re: TOP - httpd - details zum Prozess anzeigen?

Posted: 2003-03-05 11:48
by captaincrunch
strace gibts nur unter Suse ?
gibts sowas für redhat ?
Wer sagt das ? :wink:

Sicher gibt's das ganze auch für RedHat, ich hab aber gerade keine Kiste hier, wo ich nachschauen könnte, in welchem Paket das steckt. Sollte aber eigentlich schon bei der Grundinstallation dabei sein.

Re: TOP - httpd - details zum Prozess anzeigen?

Posted: 2003-03-05 11:51
by cyberline
CaptainCrunch wrote:
strace gibts nur unter Suse ?
gibts sowas für redhat ?
Wer sagt das ? :wink:

Sicher gibt's das ganze auch für RedHat, ich hab aber gerade keine Kiste hier, wo ich nachschauen könnte, in welchem Paket das steckt. Sollte aber eigentlich schon bei der Grundinstallation dabei sein.
Na, is net dabei, aber habs gefunden bei rpmfind :)

Re: TOP - httpd - details zum Prozess anzeigen?

Posted: 2003-03-05 11:57
by jtb
Hi,

ich würde "MaxRequestsPerChild 10000" ein bißchen niedriger setzen..

Das garantiert, dass ein Child irgendwann mal gekillt wird - bei dir aber erst nach 10.000 Requests..

Auch "MaxKeepAliveRequests 1500" erscheint mir ein bißchen zu hoch und kann deinen Server stark Performance rauben..

Re: TOP - httpd - details zum Prozess anzeigen?

Posted: 2003-03-05 11:57
by cyberline
Gibts auch ein Programm, welches nur Anzeigt in welchem Ordner der apache Prozess momentan liest/schreibt ?
Ich brauch das weil ich manche Prozesse habe die 25 und mehr % CPU Time brauchen und ich wissen, welche Seite das verrusacht...

Re: TOP - httpd - details zum Prozess anzeigen?

Posted: 2003-03-05 12:06
by captaincrunch
Gibts auch ein Programm, welches nur Anzeigt in welchem Ordner der apache Prozess momentan liest/schreibt ?
Ich brauch das weil ich manche Prozesse habe die 25 und mehr % CPU Time brauchen und ich wissen, welche Seite das verrusacht...
Ein spezielles Programm dafür kenne ich nicht. Informationen über Prozesse kannst du aber auch selbser ganz gut unter /proc finden.

Mach mal ein cd /proc/{PID}. cwd ist immer der Working Path des Prozesses, u.U. könnte environ noch ganz interessant sein :

Code: Select all

cat environ | tr '\0' 'n'

Re: TOP - httpd - details zum Prozess anzeigen?

Posted: 2003-03-05 12:10
by kwik
Jtb wrote: ich würde "MaxRequestsPerChild 10000" ein bißchen niedriger setzen..

Das garantiert, dass ein Child irgendwann mal gekillt wird - bei dir aber erst nach 10.000 Requests..
Ich habe es mal auf 5.000 gesetzt. Um sicher zu gehen: Das gilt pro httpd-Prozess, erst nach 10.000 wird dieser eine Prozess neu gestartet, nicht nach 10.000 Request an den Apache überhaupt?
Jtb wrote: Auch "MaxKeepAliveRequests 1500" erscheint mir ein bißchen zu hoch und kann deinen Server stark Performance rauben..
Habe es mal auf 500 gesetzt. Werde nun weiterbeobachten - und berichten ;)

Re: TOP - httpd - details zum Prozess anzeigen?

Posted: 2003-03-05 12:11
by kwik
Ich frage mich aber, wo nach wie vor der Zombie herkommt. Das habe ich erst, seitdem ich das UBB auf phpBB umgestellt habe.

Re: TOP - httpd - details zum Prozess anzeigen?

Posted: 2003-03-05 12:21
by jtb
Kwik wrote:
Jtb wrote: ich würde "MaxRequestsPerChild 10000" ein bißchen niedriger setzen..

Das garantiert, dass ein Child irgendwann mal gekillt wird - bei dir aber erst nach 10.000 Requests..
Ich habe es mal auf 5.000 gesetzt. Um sicher zu gehen: Das gilt pro httpd-Prozess, erst nach 10.000 wird dieser eine Prozess neu gestartet, nicht
nach 10.000 Request an den Apache überhaupt?

yup, das gilt pro Child..

Auszug aus der Doku:
The MaxRequestsPerChild directive sets the limit on the number of requests that an individual child server process will handle. After MaxRequestsPerChild requests, the child process will die. If MaxRequestsPerChild is 0, then the process will never expire.

Setting MaxRequestsPerChild to a non-zero limit has two beneficial effects:

it limits the amount of memory that process can consume by (accidental) memory leakage;
by giving processes a finite lifetime, it helps reduce the number of processes when the server load reduces.
Kwik wrote:
Jtb wrote: Auch "MaxKeepAliveRequests 1500" erscheint mir ein bißchen zu hoch und kann deinen Server stark Performance rauben..
Habe es mal auf 500 gesetzt. Werde nun weiterbeobachten - und berichten ;)
jo, 500 sollten ok sein.. Default ist 100..

Du musst halt wie gesagt beobachten und die Parameter an dein System anpassen..

Re: TOP - httpd - details zum Prozess anzeigen?

Posted: 2003-03-06 02:16
by kwik
Weiter gehts...

Code: Select all

2:06am  up 242 days, 14:32,  1 user,  load average: 3.01, 3.07, 2.95
71 processes: 66 sleeping, 5 running, 0 zombie, 0 stopped
CPU states: 99.4% user,  0.5% system,  0.0% nice,  0.0% idle
Mem:   248028K av,  233656K used,   14372K free,       0K shrd,    2508K buff
Swap:  787176K av,   81196K used,  705980K free                  110972K cached

  PID USER     PRI  NI  SIZE  RSS SHARE STAT %CPU %MEM   TIME COMMAND
23834 wwwrun    20   0 24096  15M  4780 R    34.2  6.3  20:56 httpd
23836 wwwrun    14   0 25784  15M  4384 R    32.8  6.3  50:47 httpd
23833 wwwrun    14   0 25524  17M  4992 R    32.2  7.1  19:24 httpd
...
Inzwischen haben mir User gemeldet:

Code: Select all

Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 184320 bytes) in /home/www/webxx/html/forum/includes/template.php(127) : eval()'d code on line 111
Nun hatte ich den Wert in der php.ini schon auf 16M gesetzt. Könnte es hier einen Zusammenhang geben - httpd-cpu-% und php-mem?

Was kann ich dagegen tun - ausser den Wert in der php.ini immer höher treiben?

Re: TOP - httpd - details zum Prozess anzeigen?

Posted: 2003-03-06 09:12
by captaincrunch
Was kann ich dagegen tun - ausser den Wert in der php.ini immer höher treiben?
Vernüntige Scripte einsetzen, die dir nicht die geamten Ressourcen ziehen ... :wink:

Re: TOP - httpd - details zum Prozess anzeigen?

Posted: 2003-03-06 10:38
by kwik
CaptainCrunch wrote:
Was kann ich dagegen tun - ausser den Wert in der php.ini immer höher treiben?
Vernüntige Scripte einsetzen, die dir nicht die geamten Ressourcen ziehen ... :wink:
phpBB gehört nicht dazu? :roll:

Re: TOP - httpd - details zum Prozess anzeigen?

Posted: 2003-03-06 11:37
by captaincrunch
phpBB gehört nicht dazu?
In dem Fall ist
a) dein Server so stark frequentiert, dass er zu klein dimensioniert ist, oder
b) du hast grundsätzliche Probleme mit deiner Apache / PHP-Konfiguration

Re: TOP - httpd - details zum Prozess anzeigen?

Posted: 2003-03-06 11:43
by kwik
Und genau das möchte ich herausfinden ;) Vorher hatte ich die Probleme mit UBB nicht. Und es kann auf dem Server (rootserver) auch ruhig mal "viel" los sein, ohne dass die Serverlast hochgeht. Aber irgendwann gibt es einen Auslöser und die Prozesse hängen, bzw brauchen wie oben beschrieben so viel Resourcen. Habe inzwischen an den Configs ja einiges geändert und beobachte weiter. Seit der letzen Ã?nderung läuft alles im grünen Bereich (load < 0.4). Ich hoffe das bleibt so, aber ich glaube da nicht wirklich dran :?

Re: TOP - httpd - details zum Prozess anzeigen?

Posted: 2003-03-12 21:24
by swosher
mmh ich habe auch mehrere stark frequentierte phpbb boards laufen ohne probleme..

es kann natürlich sein, wenn du den ein oder anderen hack eingebaut hast, das dieser nicht sauber ist..

ich habe zb bei phpkit festgestellt, das es nicht ganz sauber programmiert ist, was das schliessen der db verbindung angeht ..

aber mit phpbb habe/hatte ich bisher keine probleme...

Re: TOP - httpd - details zum Prozess anzeigen?

Posted: 2003-03-12 21:30
by kwik
Ich habe > 60 MODs installiert. Aber jeden einzelnen getestet und bei keinem grössere Probleme festgestellt. Seit der letzten httpd.conf Ã?nderung läuft alles prima.

Re: TOP - httpd - details zum Prozess anzeigen?

Posted: 2003-03-14 17:28
by nn4l
Ich habe auch gelegentlich (alle paar Monate einmal) abgestürzte httpd-Prozesse, die 100% CPU verbrauchen. Habe aber nie die Ursache rausgefunden, scheint was mit zu hoher Last bei zuwenig RAM zu tun zu haben.

Eine Lösung wäre, im apachectl Skript den ulimit Befehl zu nutzen, um die maximale CPU-Zeit pro Prozess z.B. auf 8 Std. zu begrenzen. Danach wird der Prozess abgeschossen.