Hallo,
um 1:40 habe ich dann den online-Server aus der Schußbahn wirder rausgenommen.
Die Logdateien sind leer, der Browser sendet nur ein Timeout, ps aux liefert seitenweise Kindprozesse des apachen...
Welche Logdateien? access_log? Wieviel hat der Server denn zu tun? Was sagt
top
und evtl. auch mod_status?
Status ist nicht eingebunden. top meldet dieses auf dem Testsystem:
top - 01:42:31 up 1 day, 20:15, 24 users, load average: 0.13, 0.08, 0.08 Tasks: 766 total, 1 running, 765 sleeping, 0 stopped, 0 zombie Cpu(s): 2.0% us, 2.3% sy, 0.0% ni, 94.1% id, 0.0% wa, 0.3% hi, 0.0% si Mem: 644412k total, 515472k used, 128940k free, 47236k buffers Swap: 1048816k total, 0k used, 1048816k free, 258552k cached
Der Browser hat kaum eine Chance auf http://127.0.0.1/ zuzugreifen. (Etwas 1/10 = (gesendeter Request)/Timeout)
Die Errorlogdatei ist dagegen voll von:
[info] server seems busy, (you may need to increase StartServers, ThreadsPerChild or Min/MaxSpareThreads), spawning 8 children, there are around 1 idle threads, and 20 total children
Das heißt Du hast sehr viele dieser Einträge? http://httpd.apache.org/docs-2.0/misc/perf-tuning.html#process
Leider habe ich feststellen müssen, das die einzelnen Serverprozesse im Betrieb allmählig größer wurden, deshalb habe ich die Begrenzung auch Hunderttausent Requests per Child gesetzt.
Soll man auf Keep-Alive verzichten und Timeout herabsetzen?
Bei PHP würde ich Keep-Alive abschalten, ja.
Warum?
Gibt es eine Faustformel nach Arbeitspeicher und CPUs wieviele Prozesse (in dem Fall Threads) der Apache maximal starten darf?
Das kommt drauf an wie groß die Prozesse sind (ist wegen shared memory aber nicht ganz einfach zu berechnen, siehe ggfs.: http://kris.koehntopp.de/artikel/webtune/)
Die derzeitige Testkonfiguration:
Apache 2.0.53 mit MPM worker auf Linux
> > ThreadLimit 610
> > ServerLimit 21
> > StartServers 2
> > MaxClients 600
> > MinSpareThreads 5
> > MaxSpareThreads 50
> > ThreadsPerChild 30
> > MaxRequestsPerChild 100000
> >
Das sind soweit ich das sehe nicht die Standardwerte. Wie bist Du auf die gekommen?
Richtig, das ist kein Standart. Aus der highperformance.conf:
<IfModule worker.c> StartServers 2 MaxClients 150 MinSpareThreads 25 MaxSpareThreads 75 ThreadsPerChild 25 MaxRequestsPerChild 0 </IfModule>
Die maximale Anzahl der Threads hatte ich damal mit top ermittelt und sie dann bei 610 festgesetz, somit ergeben sich zu den 21 an ServerLimit 30 ThreadsPerChild
Zu dem was Sven zum Worker-MPM zusammen mit PHP gesagt hat siehe: http://de3.php.net/manual/de/faq.installation.php#faq.installation.apache2
Das ist mir bekannt und es ist eine Testumgebung.
Vielleicht ist Deine Hardware einfach überfordert? Vielleicht hilft Dir in dem Fall auch der Feature Artikel von CK: http://aktuell.de.selfhtml.org/artikel/server/apachetuning/index.html
Auch den kenne ich und habe daher die Werte vergleichsweise hoch angesetzt.
Allgemein ist das Problem portierbar auf einen Apachen 1.3.x.
Gruß aus Berlin! eddi