Server tot - cgi Script?

Apache, Lighttpd, nginx, Cherokee
Post Reply
redhat99
Posts: 112
Joined: 2003-02-17 12:58
Location: Meckenheim
 

Server tot - cgi Script?

Post by redhat99 »

Hallo,

ich habe ein Problem, bei dem ich nicht weiter komme.

Ich habe auf meinem Server einige Domains die mit einem CGI Script arbeiten. Ich glaube das Problem tritt auf, seitdem ich diese Domainen laufen habe. Nun ist es 2 mal vorgekommen das der Server gegen 02:30
keine Arbeit mehr verrichtet. Sämtliche Dienste laufen nicht mehr, auch
das Logfiles schreiben nur sporadisch.... Ping geht! Danach hilft nur ein restart!

Ich finde im messagelog folgende Einträge:

Code: Select all

Sep 18 02:33:18 server kernel: __alloc_pages: 0-order allocation failed (gfp=0x1d2/0)
Sep 18 02:33:18 server kernel: klogd 1.4.1, ---------- state change ----------
Sep 18 02:34:51 server kernel: Inspecting /boot/System.map-2.4.25-040218
Sep 18 02:34:55 server kernel: Loaded 18980 symbols from /boot/System.map-2.4.25-040218.
Sep 18 02:34:55 server kernel: Symbols match kernel version 2.4.25.
Sep 18 02:34:58 server kernel: Loaded 15 symbols from 2 modules.
Sep 18 02:35:00 server kernel: __alloc_pages: 0-order allocation failed (gfp=0x1d2/0)
Sep 18 02:35:00 server last message repeated 3 times
Sep 18 02:35:00 server kernel: VM: killing process
Sep 18 02:35:00 server kernel: __alloc_pages: 0-order allocation failed (gfp=0x1d2/0)
Sep 18 02:35:00 server last message repeated 3 times
Sep 18 02:35:00 server kernel: VM: killing process suexec
Sep 18 02:35:00 server kernel: __alloc_pages: 0-order allocation failed (gfp=0x1d2/0)
Sep 18 02:35:00 server kernel: __alloc_pages: 0-order allocation failed (gfp=0x1d2/0)
und zur selben Zeit im warnlog:

Code: Select all

Sep 18 02:35:00 server kernel: VM: killing process suexec
Sep 18 02:35:00 server kernel: VM: killing process httpd
Sep 18 02:35:37 server kernel: VM: killing process sh
Sep 18 02:35:39 server kernel: VM: killing process httpd
Sep 18 02:36:01 server kernel: VM: killing process httpd
Diese Einträge sind vorhanden, bis zum reboot.
Für mich sieht es so aus als wenn ein Syslog Restart die Probleme macht.
Aus den Logfiles der Domains kann ich sehen, das zu der Zeit auf allen 3 Seiten der Googlebot die Seiten spidert. dabei wird immer dieses CGI verwendet.

Eventuell, Apache anders einstellen?


Ich habe zur Zeit auf dieser Maschine:

(Suse 8.1) 2.4.25-040218 #1 SMP Wed Feb 18 17:59:29 CET 2004 i686 unknown

Kann jemand weiterhelfen?

Grüsse Mario
User avatar
Joe User
Project Manager
Project Manager
Posts: 11191
Joined: 2003-02-27 01:00
Location: Hamburg
Contact:
 

Re: Server tot - cgi Script?

Post by Joe User »

Kernel updaten, logging herabsetzen, Logrote-zyklen verkürzen, (Google)Bots einschränken, Scripte überarbeiten, Dienste rekonfigurieren...
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.
redhat99
Posts: 112
Joined: 2003-02-17 12:58
Location: Meckenheim
 

Re: Server tot - cgi Script?

Post by redhat99 »

Hallo,

danke für die Antwort, wenn auch etwas spärlich ;-)

1. Habe ich gerade gemacht, hast wirklich recht, wurde auch zeit!

Linux server 2.4.26-040421 #1 SMP Wed Apr 21 13:46:36 CEST 2004 i686 unknown

So siehts jetzt aus...

Noch weitere Tipps?

Grüsse Mario
redhat99
Posts: 112
Joined: 2003-02-17 12:58
Location: Meckenheim
 

So weiter ...

Post by redhat99 »

Hallo,

ich habe um 2.30 Uhr, wenn die Symthome anfangen folgenden Eintrag im Apache Errorlog:

Code: Select all

server reached MaxClients setting, consider raising the MaxClients setting
so sieht meine httpd.conf aus:

Code: Select all

Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15
MinSpareServers 1
MaxSpareServers 1

StartServers 1
MaxClients 150

Sollte ich da was koriegieren?

Ich habe folgendes in einem anderen Forum gefunden:
Die Fehlermeldung an sich spricht ja für sich selbst; das Problem liegt im Erzeugen der Prozesse, die die Requests abarbeiten. Die Prozesse unterliegen einem automatischen Pooling, d.h. steigt die Anfragelast und es sind weniger als 20 Prozesse im Leerlauf (MinSpareServers), werden so viele Prozesse erzeugt, bis wieder 20 im Leerlauf sind. Es werden höchstens 300 Prozesse erzeugt (MaxClients). Sinkt die Anfragelast wieder, so achtet Apache darauf, dass höchstens 30 im Leerlauf sind (MaxSpareServers). Das Problem liegt nun darin, dass das Forken neuer Prozesse ein "aufwändiger" Vorgang ist und zusätzlich das Auffüllen fehlender Leerlaufprozesse sowieso höchstens im Einsekundenabstand erfolgt. Die Fehlermeldung deutet darauf hin, dass die Auslastung relativ starken bzw. schnellen Schwankungen unterworfen ist. Du solltest deshalb MinSpareServers sukzessive erhöhen (vielleicht in 10er-Schritten). MaxSpareServers sollte im Regelfall höher sein, wobei Du den Abstand zwischen beiden Werten gleich lassen kannst (1/30 von MaxClients ist eine gute Faustregel). Bsp.: MinSpareServers 40, MaxSpareServers 50. Es macht auch Sinn, dass StartServers und MinSpareServers nicht allzu weit auseinanderliegen. Apache erzeugt nach dem Start sowieso mehr Prozesse bei Dir, als in StartServers angegeben. Der Vorteil eines niedrigen StartServers ist nur, dass Apache die ersten Requests schneller bearbeitet, aber unmittelbar nach dem Start auch schneller busy wird. Wenn StartServers höher ist, braucht er etwas länger um die ersten Requests zu bearbeiten, ist dann aber auch sozusagen "voll funktionstüchtig";-) Durch entsprechende Werte ließe sich das Pooling natürlich komplett deaktivieren (MinSpareServers = MaxSpareServers = MaxClients), aber das ist meistens nicht gewünscht. Noch kurz dazu, um welches Problem es sich nicht handelt: MaxClients ist ausreichend. Wäre das nicht so, hieße die Fehlermeldung "server reached MaxClients setting, consider raising the MaxClients setting".
Wäre für Tipps wirklich dankbar!

Grüsse Mario
oxygen
Posts: 2138
Joined: 2002-12-15 00:10
Location: Bergheim
 

Re: Server tot - cgi Script?

Post by oxygen »

Ich würde vorschlagen:
Timeout runtersetzten
max clients runtersetzten, z.B. auf 100

Interessant wäre noch der noch der MaxRequestsPerChild Wert, der sollte möglichst hoch stehen.

Möglicherweise könnte es helfen den SWAP zu vergrößern, das würde zumindest verhindern das Kernel anfängt Prozesse zu killen.
nn4l
Posts: 172
Joined: 2002-06-19 07:06
Contact:
 

Re: Server tot - cgi Script?

Post by nn4l »

Schau dir an, wie groß die Apache Prozesse werden. MaxClients * Prozessgröße sollte immer kleiner als die vorhandene phys. RAM-Größe abzgl. Platz für MySQL und sonstiges sein, sonst fängt der Server an zu swappen.

Falls die Prozesse ungewöhnlich groß werden, hast du evtl. ein PHP Speicherleck. Dann MaxRequestsPerChild runtersetzen (z.B. 1000), damit die Prozesse alle paar Stunden neu starten.
redhat99
Posts: 112
Joined: 2003-02-17 12:58
Location: Meckenheim
 

Re: Server tot - cgi Script?

Post by redhat99 »

Hallo,

danke für Eure Tipps!

Ich habe jetzt aus den Antworten und dem oben genannten Beitrag versucht, vernünftige Werte zu finden:

Code: Select all

Timeout 100
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15
MinSpareServers 40
MaxSpareServers 50

MaxRequestsPerChild 2500

StartServers 1
MaxClients 150
So hab ichs jetzt eingestellt. Ich habe in den Logfiles/ Auswertungen gesehen, das der Memory stark ansteigt. Der SWAP wird aber nicht grösser.

Ob ich die Werte mal so probiere, oder ist das grosser Unfug ??? (vor allem der MaxSpareServers & MinSpareServers) Ich habe mich da auf den Forumsbeitrag von oben gehalten.

Zur Maschine:

Ist Suse 8.1 mit Kernel 2.4.26 und 256 MB RAM


Grüsse Mario
nn4l
Posts: 172
Joined: 2002-06-19 07:06
Contact:
 

Re: Server tot - cgi Script?

Post by nn4l »

256 MByte phys. RAM ist bitter wenig.

Poste mal den output von "top". Bei mir:

Code: Select all

 17:32:58 up 12 days,  2:23,  2 users,  load average: 0.72, 1.24, 1.68
48 processes: 47 sleeping, 1 running, 0 zombie, 0 stopped
CPU states:   4.3% user,   2.8% system,   0.5% nice,  92.3% idle
Mem:   1032748K total,  1017740K used,    15008K free,    52460K buffers
Swap:  1995948K total,  1260328K used,   735620K free,   357412K cached

  PID USER     PRI  NI  SIZE  RSS SHARE STAT %CPU %MEM   TIME COMMAND
  882 www-data   9   0 59840  14M  3252 S     4.1  1.4   1:55 httpd
  881 www-data   9   0 60180  18M  7032 S     0.0  1.8   1:45 httpd
  883 www-data   9   0 59916  15M  4072 S     0.0  1.5   1:59 httpd
  884 www-data   9   0 60032  14M  3156 S     0.0  1.4   1:52 httpd
 1207 www-data   9   0 60196  14M  3308 S     0.0  1.4   1:52 httpd
 9965 www-data   9   0 59564  14M  3328 S     0.0  1.4   1:51 httpd
31942 www-data   9   0 47348  880   756 S     0.0  0.0   0:00 httpd
D.h. hätte ich nur 256 MByte RAM, dürfte MaxClients (und MaxSpareServers) höchstens so 10 - 15 sein.
redhat99
Posts: 112
Joined: 2003-02-17 12:58
Location: Meckenheim
 

Re: Server tot - cgi Script?

Post by redhat99 »

Hallo,

top ergibt unter der oben beschriebenen Konfiguration:

Code: Select all

  5:59pm  up 19:45,  1 user,  load average: 0.03, 0.10, 0.14
124 processes: 123 sleeping, 1 running, 0 zombie, 0 stopped
CPU states:  0.1% user,  1.3% system,  0.0% nice, 98.4% idle
Mem:   247968K av,  230420K used,   17548K free,       0K shrd,   32304K buff
Swap:  787176K av,   26536K used,  760640K free                  122660K cached

Was empfiehlts du mir?

MinSpareServers 10
MaxSpareServers 20 ???


256 MB RAM sind wirklich wenig. Wüede ja gern was dazu stecken lassen, aber bei 1und1 geht das ja wohl nicht. Ich werde warscheinlich einen neuen Server anschaffen müssen, der dürfte dann aber bei Hetzner und Co. stehen ...

Grüsse Mario
nn4l
Posts: 172
Joined: 2002-06-19 07:06
Contact:
 

Re: Server tot - cgi Script?

Post by nn4l »

Das interessante sind die Zeilen mit den http-Prozessen, die fehlen hier. Gib in top ein: u www-data (oder was immer der User name für den Apache ist).
redhat99
Posts: 112
Joined: 2003-02-17 12:58
Location: Meckenheim
 

Re: Server tot - cgi Script?

Post by redhat99 »

Hallo,

*kltsch* Hab ich total vergessen... sorry so hier:

Code: Select all

  6:28pm  up 20:13,  1 user,  load average: 0.03, 0.08, 0.08
124 processes: 122 sleeping, 2 running, 0 zombie, 0 stopped
CPU states: 16.6% user,  2.7% system,  0.0% nice, 80.6% idle
Mem:   247968K av,  231912K used,   16056K free,       0K shrd,   36388K buff
Swap:  787176K av,   26508K used,  760668K free                  118824K cached

  PID USER     PRI  NI  SIZE  RSS SHARE STAT %CPU %MEM   TIME COMMAND
 2193 wwwrun     9   0  8432 8432  7952 S     0.1  3.4   0:00 httpd
 2238 wwwrun     9   0  8216 8216  7840 S     0.1  3.3   0:00 httpd
 2245 wwwrun     9   0  8440 8440  7956 S     0.1  3.4   0:00 httpd
 2187 wwwrun     8   0  8436 8436  7956 S     0.0  3.4   0:00 httpd
 2189 wwwrun     8   0  8956 8956  7936 S     0.0  3.6   0:00 httpd
 2191 wwwrun     9   0  8208 8208  7840 S     0.0  3.3   0:00 httpd
 2192 wwwrun     8   0  8212 8212  7836 S     0.0  3.3   0:00 httpd
 2195 wwwrun     8   0  8208 8208  7840 S     0.0  3.3   0:00 httpd
 2196 wwwrun     8   0  8220 8220  7844 S     0.0  3.3   0:00 httpd
 2197 wwwrun     9   0  8208 8208  7804 S     0.0  3.3   0:00 httpd
 2198 wwwrun     8   0  8440 8440  7952 S     0.0  3.4   0:00 httpd
 2199 wwwrun     8   0  8456 8456  7952 S     0.0  3.4   0:00 httpd
 2200 wwwrun     8   0  8432 8432  7944 S     0.0  3.4   0:00 httpd
 2220 wwwrun     8   0  8436 8436  7948 S     0.0  3.4   0:00 httpd
 2221 wwwrun     8   0  8212 8212  7844 S     0.0  3.3   0:00 httpd
 2222 wwwrun     9   0  8208 8208  7840 S     0.0  3.3   0:00 httpd
 2223 wwwrun     9   0  8440 8440  7952 S     0.0  3.4   0:00 httpd
 2224 wwwrun     8   0  8432 8432  7952 S     0.0  3.4   0:00 httpd
 2225 wwwrun     8   0  8432 8432  7952 S     0.0  3.4   0:00 httpd
 2226 wwwrun     8   0  8220 8220  7848 S     0.0  3.3   0:00 httpd
 2227 wwwrun     8   0  8432 8432  7952 S     0.0  3.4   0:00 httpd
 2228 wwwrun     8   0  8212 8212  7848 S     0.0  3.3   0:00 httpd
 2229 wwwrun     9   0  8440 8440  7952 S     0.0  3.4   0:00 httpd
 2230 wwwrun     9   0  8436 8436  7956 S     0.0  3.4   0:00 httpd
 2231 wwwrun     9   0  8436 8436  7944 S     0.0  3.4   0:00 httpd
 2232 wwwrun     8   0  8440 8440  7952 S     0.0  3.4   0:00 httpd
 2233 wwwrun     9   0  8212 8212  7848 S     0.0  3.3   0:00 httpd
 2234 wwwrun     8   0  8208 8208  7840 S     0.0  3.3   0:00 httpd
 2235 wwwrun     8   0  8220 8220  7844 S     0.0  3.3   0:00 httpd
 2236 wwwrun     8   0  8440 8440  7956 S     0.0  3.4   0:00 httpd
 2237 wwwrun     8   0  8440 8440  7948 S     0.0  3.4   0:00 httpd
 2239 wwwrun     9   0  8436 8436  7956 S     0.0  3.4   0:00 httpd
 2240 wwwrun     9   0  8412 8412  7956 S     0.0  3.3   0:00 httpd
 2241 wwwrun     8   0  8436 8436  7948 S     0.0  3.4   0:00 httpd
 2242 wwwrun     8   0  8412 8412  7952 S     0.0  3.3   0:00 httpd
 2243 wwwrun     8   0  8216 8216  7840 S     0.0  3.3   0:00 httpd
 2244 wwwrun     9   0  8216 8216  7844 S     0.0  3.3   0:00 httpd
 2246 wwwrun     9   0  8444 8444  7956 S     0.0  3.4   0:00 httpd
 2247 wwwrun     8   0  8440 8440  7956 S     0.0  3.4   0:00 httpd
Danke im Vorraus!

Grüsse Mario
nn4l
Posts: 172
Joined: 2002-06-19 07:06
Contact:
 

Re: Server tot - cgi Script?

Post by nn4l »

Also alle httpd-Prozesse sind ca. 8 MByte groß, einschließlich eines ca. 7 MByte großen shared (von allen Prozessen gemeinsam genutzten) Segments. Macht also effektiv 1 MByte pro Prozess. D.h. zur Zeit könntest Du die Konfiguration bei 100 MaxClients belassen.

Interessant wäre jedoch die top-Ausgabe nach ein paar Stunden Betrieb. Bei mir starten die Prozessse nämlich auch mit ca. 8 MByte, aber nach einer Weile haben sie dann schon 14 - 20 MByte. Also evtl. die Berechnung morgen abend nochmal wiederholen.

Kannst ja mal ein rekursives wget oder einen Link Checker (http://home.snafu.de/tilman/xenulink.html) auf deine Website loslassen. Man sieht dann auch, wieviel RAM die CGI-Prozesse verbrauchen. Das müsste man im Grunde in die Rechnung mit einbeziehen.
redhat99
Posts: 112
Joined: 2003-02-17 12:58
Location: Meckenheim
 

Re: Server tot - cgi Script?

Post by redhat99 »

Hallo,

die Werte werde ich morgen mal erzeugen und dann posten.

Danke Dir für Deine Hilfe!

Werde die Werte dann mal so lassen wie beschrieben, also auch mit MaxSpareServer und so weiter.

Code: Select all

Timeout 100
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15
MinSpareServers 40
MaxSpareServers 50

MaxRequestsPerChild 2500

StartServers 1
MaxClients 100

Ich denke Google wird auch heute wieder richtig arbeit leisten :-)

Danke Dir!

Grüsse Mario
Post Reply