Server voll ausgelastet

Apache, Lighttpd, nginx, Cherokee
lorddarkmage
Posts: 36
Joined: 2006-10-26 05:57

Server voll ausgelastet

Post by lorddarkmage » 2007-08-18 21:18

Hallo zusammen,

ich weiss keinen Rat mehr. Seit nun guten 2 Wochen hab ich ein sehr merkwürdiges Phänomen auf meinem Server.

Kurze Serverinfo:
Pentium 4 3,2 Ghz
1024 Mb Ram
80 Gb HDD
Red Hat Enterprise Linux ES release 3 (Taroon Update 5)
Apache2.0.46
PHP4.4.0
MySQL Server 4.1.13-standard
Confixx Pro 3.3.1

Auf dem Server sind derzeit circa 80 Endkunden angelegt. Unter anderem ein großes Forum mit einigen hundert User pro Tag was mit WBB realisiert ist. Das Ganze läuft seit einigen Monaten ohne Probleme. Die Größe des Forums hat sich nicht geändert und auch die Besucher pro Tag sind ungefähr gleich geblieben. Ebenso die Spitzenbesucherzahlen. War für den Server kein Problem. Nun aber stelle ich fest, dass der Load average mehrmals am Tag bis über 45 hoch geht und die Maschine quasi dann steht. Da hilft nur noch ein Reboot per Webinterface.

Was kann ich da machen? Wie finde ich die Ursache heraus? Mir drängt sich die Vermutung auf, dass irgendein Webuser etwas auf dem Server laufen lässt was die Kiste regelmäßig in die Knie bringt. Leider weiss ich nicht wie ich dem auf die Schliche kommen soll. Logs zeigen nichts ungewöhnliches an.

Jemand einen Tip oder Idee für mich?

Gruß und Dank
LordDarkmage

lorddarkmage
Posts: 36
Joined: 2006-10-26 05:57

Re: Server voll ausgelastet

Post by lorddarkmage » 2007-08-19 07:46

Ok, grad eben aufgestanden und gleich wieder nen hohen Load gehabt. Hab davon mal ein Screeni gemacht. Wie man sieht ist der Apache gut mit dabei. Zu dem noch einen Blick ins die access.log und dabei finde ich die Zeile:
[Sun Aug 19 00:46:13 2007] [error] server reached MaxClients setting, consider raising the MaxClients settings

Das war dann auch der letzte Logeintrag bis zum Reboot heute morgen um 7:20 Uhr. Hab gestern extra die Datenbank des Forums auf einen anderen Server ausgelagert, dass die Last was sinkt. Hat wohl noch nicht gereicht. :(

User avatar
daemotron
Administrator
Administrator
Posts: 2635
Joined: 2004-01-21 17:44

Re: Server voll ausgelastet

Post by daemotron » 2007-08-19 10:13

Ohne Deine Konfiguration näher zu kennen: Offenbar wird Dein Apache durch eine größere Anzahl Requests gezwungen, immer weitere Prozesse zu spawnen (ich vermute mal, er läuft mit mpm_prefork), bis er ans Limit kommt (MaxClients definiert die maximale Anzahl an zu spawnenden Apache-Prozessen).

Wenn Du das Limit (wie vorgeschlagen) jetzt hochsetzt, wird Dir das wahrscheinlich nicht viel helfen. Vermutlich ist Dein MaxRequestsPerChild-Wert zu niedrig angesetzt. Dreh den mal richtig hoch (10000 oder so). Dann wird zwar eventuell der einzelne Request etwas langsamer verarbeitet, aber der Apache spawnt nicht wie Hulle einen Prozess nach dem anderen und nagelt Dir damit den Server dicht. Du kannst es ja mal für den Anfang damit probieren und dann in kleinen Schritten an Deine Bedürfnisse anpassen:

Code: Select all

<IfModule prefork.c>
   StartServers         1
   MinSpareServers      1
   MaxSpareServers      2
   ServerLimit          150
   MaxClients           20
   MaxRequestsPerChild  10000
</IfModule>

KeepAlive On
MaxKeepAliveRequests 200
KeepAliveTimeout 2


//EDIT//
MaxClients ist mit 20 schon fast großzügig gesetzt. Da würde ich auf keinen Fall drüber gehen (es sei denn, Du hast RAM wie Gott in Frankreich). Noch besser bedient wärest Du allerdings, wenn Du auf mpm_worker umsteigst und PHP per FastCGI (mod_fcgid) ansprichst. Dann kannst Du auch eine definierbare Anzahl an PHP-Prozessen vorhalten, die dann sofort den Ball aufnehmen können. Wenn der Flaschenhals am Ende in den PHP-Skripten liegt, reichen vielleicht wenige Apache-Instanzen in Kombination mit ein paar mehr PHP-Instanzen.

lorddarkmage
Posts: 36
Joined: 2006-10-26 05:57

Re: Server voll ausgelastet

Post by lorddarkmage » 2007-08-19 12:06

Juti, hab nun mal so angepasst wie du es vorgeschlagen hast. MaxClients stand standartmäßig auf 150. Wenn du mir sagst, dass 20 schon großzügig ist und ich für mehr auch mehr RAM brauche, dann ist schon fast klar wieso der Server so runtergezogen wird.

Vermutung:
Durch die hohe Anzahlt gespawnter Prozesse reicht irgendwann der RAM nicht mehr aus und der Server muss auf Platte auslagern. Das würde mir auch die hohe Plattenlast (iowaits) erklären. Weil die Platte halt arschlahm ist, schaukelt sich das alles auf und der Server kommt zum "Stillstand".

Wer das jetzt so beobachten und mal sehen was passiert. Ansonsten spendiere ich dem Hobel halt noch ein Gig mehr Ram.

tischi
Posts: 215
Joined: 2003-10-26 17:57

Re: Server voll ausgelastet

Post by tischi » 2007-08-19 14:05

hi,

aktiviere doch mal server_status und beobachte ...

Code: Select all

ExtendedStatus On

<Location /server-status>
    SetHandler server-status
    Allow from all
</Location>


Das ganze gibt dir dann genaue Infos zu deinem Apache aus, z.B. bei mir:

Code: Select all

Current Time: Sunday, 19-Aug-2007 14:04:35 CEST 
Restart Time: Sunday, 19-Aug-2007 06:25:17 CEST
Parent Server Generation: 0
Server uptime: 7 hours 39 minutes 17 seconds
Total accesses: 393295 - Total Traffic: 1.6 GB
CPU Usage: u44.71 s57.47 cu1445.68 cs0 - 5.62% CPU load
14.3 requests/sec - 61.2 kB/second - 4389 B/request
105 requests currently being processed, 45 idle workers
................................................................
_KK__K_KK_KK_KK_K_KK_KK__.......................................
K_KKKK__KKK__K_KKKWKK_K_K.......................................
................................................................
KKKK_KK___KK_K_KW_KKK__KK.......................................
KKKKKKWKKKKKKKKKKKK_KKKKK.......................................
_K_KK__K_KKK_KK___K_KK_K_.......................................
_KKKK_KKKKKKKKKKK__KKKKKK.......................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................

noto
Posts: 6
Joined: 2007-02-19 04:38

Re: Server voll ausgelastet

Post by noto » 2007-09-09 11:11

typisches Szenario wenn Timeout auf 15 steht. Childs reichen dann nicht aus um wartende Clients zu bedienen. Apache forkt dann ständig neue Childs.

Schlimmer ist es noch wenn KeepAlive auf Off steht.

Du hattest 315 Prozesse, 302 davon Sleeping! Und ~ 1000 MB Swap. Ein httpd2 Prozess benötigt zwischen 10 - 17 MB Ram.

Code: Select all

ps axu --sort:command
RSS ist RAM in KB

MaxClients 150 wären 150 * ~ 12 MB RAM = 1800 MB RAM nur für httpd2 Prozesse. Kein Wunder wenn dir der RAM ausgeht und auf Festplatte ausgelagert wird.

User avatar
daemotron
Administrator
Administrator
Posts: 2635
Joined: 2004-01-21 17:44

Re: Server voll ausgelastet

Post by daemotron » 2007-09-09 12:23

Wobei ich immer noch tippen würde, dass da auch irgendeine Webapplikation ein Memory Leak wie ne Zeitbombe mit sich rumschleppt. Ansonsten kann ich mir die krasse Diskrepanz beim Speicherverbrauch der httpd-Prozesse (~10MB bis ~100MB) nicht wirklich erklären.