PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Apache macht immer wieder dicht



mcfisch
13.11.07, 15:00
Ich hab mehrere Debian3.1-Server übernommen, auf denen Apache mit PHP4 läuft.

Einer davon macht seit geraumer Zeit Ärger. Anscheinend liegt es an der Anzahl der gleichzeitigen Verbindungen. Wenn dafür im Cacti eine Zahl von über 200 angezeigt wird, dauert es nicht lange und der Apache ist nicht mehr erreichbar. Nach einem Restart des Apache geht es wieder, bis die Anzahl erneut auf über 200 steigt.

Die Maschine ist eine Sun X2100 mit Opteron 148 (Single-Core, 2,2 GHz) und 2GB RAM. Das sollte völlig ausreichen. Eine 2. Maschine mit der gleichen Konfiguration hostet wesentlich mehr Webs ohne Schwierigkeiten.

Auf dem Problem-Server laufen eine Handvoll Instanzen unseres selbstentwickelten CMS - eines davon scheint den Apache zum Freeze zu bringen.

Ich weiß nicht mehr weiter, alle Einstellungen sollten so funktionieren.

An Software wird eingesetzt:

Debian 3.1 2.6.8-11 amd64 generic
Apache 2.0.54
PHP 4.3.10-19

Der besagt Webauftritt wird über einen virtuellen Apache-Webserver realisiert, SQL-Abfragen gehen an einen externen SQL-Server.

Wo soll ich denn noch suchen? Die üblichen Verdächtigen in /var/log helfen genauso wenig, wie die Auftritteigenen Logs. "top" zeigt mir jede Menge apache-Threads und wenig Last.

Ich weiß echt nicht mehr weiter... :confused:

marce
13.11.07, 15:06
Wie sieht denn die mpm-Konfiguration aus?

mcfisch
14.11.07, 08:40
Meinst du das?


<IfModule prefork.c>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 100
MaxRequestsPerChild 0
</IfModule>

<IfModule worker.c>
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>

<IfModule perchild.c>
NumServers 5
StartThreads 5
MinSpareThreads 5
MaxSpareThreads 10
MaxThreadsPerChild 20
MaxRequestsPerChild 0
AcceptMutex fcntl
</IfModule>

marce
14.11.07, 08:44
und welcher wird verwendet?

Und zusätzlich: wird KeepAlive verwendet?

mcfisch
14.11.07, 09:01
Keepalive ist an, maxrequests auf 100 und timeout bei 15s.

Wie finde ich die MPM-Version raus?

marce
14.11.07, 09:05
http://httpd.apache.org/docs/2.0/programs/httpd.html

-l
Output a list of modules compiled into the server. This will not list dynamically loaded modules included using the LoadModule directive.

mcfisch
14.11.07, 09:16
Da bekomme ich folgende Ausgabe:


Compiled in modules:
core.c
mod_access.c
mod_auth.c
mod_log_config.c
mod_logio.c
mod_env.c
mod_setenvif.c
prefork.c
http_core.c
mod_mime.c
mod_status.c
mod_autoindex.c
mod_negotiation.c
mod_dir.c
mod_alias.c
mod_so.c


Aber Versionsnummern sehe ich nirgends, auch die anderen Parameter von apache2ctl helfen da nicht weiter.

marce
14.11.07, 09:30
Ok, anhand davon, und wenn man sich folgendes anschaut:


<IfModule prefork.c>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 100
MaxRequestsPerChild 0
</IfModule>
fällt was auf?

mcfisch
14.11.07, 10:00
Warum steigt er dann bei 200 Verbindungen aus? Ich hab mit den Einstellungen schon etwas rumgespielt (also z.B. maxclients runter, spare-Prozesse rauf etc.) - erfolglos.

marce
14.11.07, 10:01
Warum steigt er dann bei 200 Verbindungen aus? Ich hab mit den Einstellungen schon etwas rumgespielt (also z.B. maxclients runter, spare-Prozesse rauf etc.) - erfolglos.
das war, ehrlich gesagt, die doofste Idee, um dieses Problem zu lösen...

Ich empfehle die Lektüre der sehr guten Apache-Doku...

mcfisch
14.11.07, 10:05
Was sind denn sinnvolle Werte für einen solchen Server (wie gesagt vor allem CMS-Backend-Betrieb, mehrere 1000 Zugriffe am Tag)?

marce
14.11.07, 10:11
Sorry, aber woher sollen wir das hier wissen wie euer System ausgelastet ist?

Ich hab' hier Systeme mit mehreren 10000 Hits pro Tag welche mit den Einstellungen von euch problemlos laufen würden - und welche mit wenigen Zugriffen, bei denen es damit Probleme geben könnte...

daher wieder mein Tipp von oben: Doku lesen - da finden sich (übrigens seeeehr gut versteckt) so Dinge wie http://httpd.apache.org/docs/2.0/de/misc/perf-tuning.html ...

mcfisch
14.11.07, 10:52
Danke erstmal für die Tipps. Die Apache-Doku hat mir bisher nicht allzuviel weitergeholfen (sofern ich sie richtig verstanden hab :ugly:).

Meines Erachtens nach nimmt der Apache und seine Kindprozesse immer mehr RAM, bis nix mehr geht, zudem vermehren sich die Prozesse ungehemmt. Soweit ich das verstanden habe, ist es bei prefork wohl so, dass jeder Prozess 1 Client bedient - stimmt das so? Dann brauche ich mich nicht wundern, dass die Anzahl der Prozesse so stark anschwillt. Allerdings ist mir nicht klar, warum der Server überhaupt ein Problem damit hat - schließlich handelt eine baugleiche Maschine die gleichen Lasten ohne Probleme. Allerdings kann ich den Server auch nicht einfach mal runterfahren und ein paar mehrstündige Tests laufen lassen...

PS: könnte evtl. auch MMap für die Probleme verantwortlich sein?

Aufgrund der Einträge im Log (server reached MaxClients setting, consider raising the MaxClients setting) hab ich mal MaxClients auf 150 gesetzt. Ich kann momentan nur versuchen, die Werte nach und nach anzuheben um die Grenzen besser auszuloten. Leider kommt erst so langsam das Verständnis für diese Geschichte.