Apache treibt Server auf die Spitze

127.0.0.1

New Member
Hallo,

folgendes Problem: einer unserer Server ist ausgefallen. Mussten alle Seiten auf den zweiten Server umziehen.

Das Prolem an der Sache ist jetzt das der Server unter dem load Average nach einer gewissen Zeit fast zusammenbricht. Etwa 12 Stunden und dann ist ein Stop und ein Start die einzige Lösung das ding unter Kontrolle zu bringen.

Wie soll es bei Linux anders sein, ich gehe von einem Konfigurationsfehler aus. Ich finde ihn aber nicht.

Noch ein paar Eckdaten: Der MySql läuft auf einem extra Server diser wiederum ist mit einem Gibait Ethernet an die Webserver konnektiert.

Meine Vermutung ist des Weiteren, das die persistente Verbindung zum DB Server dafür verantwortlich sein kann. Stimmt ihr damit überein?

Hier noch die Apache conf:

Code:
Timeout 200
#Timeout 300

KeepAlive On

MaxKeepAliveRequests 500
#MaxKeepAliveRequests 150

KeepAliveTimeout 5
#KeepAliveTimeout 50

<IfModule prefork.c>
    StartServers        10
    MinSpareServers     10
    MaxSpareServers     20
    MaxClients         300
    MaxRequestsPerChild  0
</IfModule>

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

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

<IfModule peruser.c>
    ServerLimit          256
    MaxClients           256
    MinSpareProcessors     2
    MaxProcessors         10
    MaxRequestsPerChild 1000

    ExpireTimeout        300
    
    Multiplexer nobody nobody
    
    Processor apache apache

</IfModule>

<IfModule itk.c>
    StartServers          10
    MinSpareServers        4
    MaxSpareServers       12
    MaxClients           220
    MaxRequestsPerChild 1500
</IfModule>

Listen 80
Listen 8080
 
Last edited by a moderator:
Ok, da die Symptome nur etwas ungenügend beschrieben sind, das volle Programm:

* Du redest von Load. In welcher Höhe bewegt sie sich üblicherweise? Wie hoch ist sie, wenn du den restart durchführst? Wie sehen CPU und I/O Wait aus?
* Startest du nur, weil sich die Load nach oben bewegt oder startest du neu, weil die Webseite langsam wird?
* Speicher- und Swapauslastung?
* Identische Version von Apache und aller darin enthaltenen Module (php, usw)?

Weiteres Debugging nur nach mehr Infos ;-)
 
Danke amnesie für die schnelle Antwort,

um deine Fragen zu beantworten:

Du redest von Load. In welcher Höhe bewegt sie sich üblicherweise? Wie hoch ist sie, wenn du den restart durchführst? Wie sehen CPU und I/O Wait aus?

Nach dem Restart ist der load Average bei 0.02 für etwa 2 Stunden, leider stegt dies bei der gleichen Anzahl der Zugriffe Exponential an :-(.
Die CPU auslastung liegt nach dem Start des Apache je nach aufkommen bei 10-20 % aber schaukelt sich hoch. Die I/0 Zugriffe haben wir reduziert durch das auskommentieren der einzelnen vhost logs.

Startest du nur, weil sich die Load nach oben bewegt oder startest du neu, weil die Webseite langsam wird?

Die Seiten reagieren nicht mehr. Ein hoher la ist für mich kein Anlass gleich die Prozesse zu killen ;-) Die Seiten enden früher oder später in einem Timeout. Aber zu Anfang legt das Vieh richtig speed zu.

Speicher- und Swapauslastung?

Swap nutzt er nicht, ram zu 40 % belegt von 3 Gig.

Identische Version von Apache und aller darin enthaltenen Module (php, usw)?

Ja die Server sind vollkommen Identisch eingerichtet. Nur das der jetzt 300 Seiten dazubekommen hat ;-)

netstat und lsof lassen keine rückschlüsse auf zu viele Connects oder ähnliches zu. Die Auswertung der Einzelseiten, wenn man den werten vertraut ;-), liegt bei 100 Besuchern pro Stunde.

Habe ein Skript in den cron gepackt das den reload automatisch durchführt. Aber das ist denke ich nicht im sinne des Erfinders :rolleyes:

Gruß localhost
 
Kannst du eingrenzen, welche Seiten betroffen sind? Nur PHP-Seiten oder sind das nur Seiten, die auch Datebank-Zugriffe machen? Konfiguriere mal das Apache-Log so, daß die gesamte Auslieferungszeit mitgeloggt wird.

Möglicherweise ist der Connectionpool zur Datenbank zu klein, das würde einiges erklären.
 
Das ist ein CMS System. alles PHP.

Connectionpool zur Datenbank zu klein...

Wo stellt man das ein? PHP.ini ?

Oder was meinst du damit genau?

Und auch wenn.. Wie will man denn das für knapp 600 Unterschiedlich hoch frequentierten Seiten bemessen?

localhost
 
Last edited by a moderator:
Hm, offenbar kann man den Connectionpool unter PHP gar nicht einstellen.

Kannst du mal nachschauen, ob die Datenbank-Sessions vielleicht am Ende sind?

Code:
show status like "max_used_connections"; show variables like "max_connections";

Für weitere Dinge würde ich mal den extended-status-Seiten des Apache konsultieren, eventuell werden auch die Threads knapp.
 
Der von dir genannte Query gibt ok zurück.

der DB Server läuft durchschnittlich auf 50 % Leistung. Außerdem hat der vorher auch für die gleiche Anzahl der Seiten unproblematisch alle Daten geliefert.

Wenn ich den Apache alles mitloggen lasse ist er in 4 Min bei einem Load von 30. Ich denke das ging nach hinten los.

Ich kann versuchen eine Seite auszusuchen die Weniger frequentiert ist. Aber die gibt auch nicht genügend Connections für eine adequate Auswertung.

Was sagt ihr/du zu der Persistenten connection?

Hast du villeicht noch eine Idee?

localhost
 
Nö, sorry. Für alles weitere würde ich persönlich einfach mal so im System rumschnüffeln, bis mir was auffällt. Ist aber einfacher gemacht als beschrieben ...
 
Hallo,

so nach einigem basteln an der httpd.conf und dem worker modul läuft er jetzt mal 24 stunden duch.

Der Apache cache ist jetzt aber zu einem Problem geworden.

Gibt es eine Möglichkeit das zu unterbinden?

127.0.0.1
 
Hi,

unter Top finde ich immer den Wert cached, welcher sich exponetiell erhöht.

Läuft der Apache erhöht dieser sich. Ich denke also das der dafür verantwortlich ist, oder PHP?

Ich bin da gerade etwas ratlos.:confused:

127.0.0.1
 
Exponentiell erhöhen? Ich hoffe nicht ;-)

Der Cache ist der Filesystem-Cache, wenn der sich füllt, hat das eigentlich nur eine positive Wirkung auf die Performance. Das Betriebssystem verkleinert den von selbst, wenn der Speicher von einer Anwendung gebraucht wird.
 
Hi,

doch tatsächlich. Dieser Wert erhöhte sich, er sank auch nicht mehr. Nach einem Apache Reload schrupfte dieser Wert auf wenige KB.

Ich habe jetzt das mpm-worker modul rausgeworfen und den apache nochmal mit dem mpm-prefork modul emerged. Seit dem summt der Server wie eine Biene. Der Load Average liegt jetzt konstant bei 0.01 bis 0.30 zu spitzenzeiten. Die CPU Last ist bei etwa 10 bis 40 %.

So soll das Ganze aussehen.

Für alle die das gleiche Problem haben werwenden vermutlich auch Gentoo 2006.1 mit dem Hardened-Kern 2.6.18-r6. Wenn man einigen Mailinglisten im Netz vertrauen schenken mag, ist das mpm-worker Modul des Apache nicht empfehlenswert mit einem Hardened Kernel.

Ich bedanke mich für die Antworten

127.0.0.1
 
Hm, die Information, daß du unterschiedliche Kernel fährst, wär vorher auch interessant gewesen. Ich ging davon aus, daß die Maschinen von der Hardware vergleichbar und in der sonstigen Konfiguration identisch seien.
 
Back
Top