PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : maximaler wert für maxclients



lou_ziffer
17.02.05, 12:34
Hallo,

ich versuche gerade zu berechnen, wie hoch ich maxclients im Apache2 auf meinem Webserver setzen kann.
Dazu hab ich ein ps aux:

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
nobody 20800 0.1 0.3 8104 4028 ? S 13:01 0:00 /usr/local/apache2/bin/httpd -k start
und ein free -b:

total used free shared buffers cached
Mem: 1055735808 1042706432 13029376 0 75182080 477384704
-/+ buffers/cache: 490139648 565596160
Swap: 1077469184 2535424 1074933760
gemacht und den wert 1055735808 (gesamter Speicher) durch den 8104 (Apacheprozessgröße???) dividiert und erhalte 130273 als maximale Anzahl der maxclients! Das kann doch nicht stimmen...
Was mache ich falsch? Vielleicht steh ich ja nur grad "auf der Leitung"... :-)

Tomek
17.02.05, 12:47
Wieviele gleichzeitige Clients erwartest du denn auf deinem Webserver?

Standardmässig liegt der Maximalwert für die Option MaxClients bei 256. Dieser Wert ist hard-coded in den Apache-Quellen. Um diesen Wert zu erhöhen, müsstest du Apache neu kompilieren. Ich halte es aber für fragwürdig, ob du das überhaupt benötigst.

lou_ziffer
17.02.05, 12:56
ich habe derzeit 366 gleichzeitige Apache Prozesse unter ps aux. Komischerweise fast konstant - offenbar beendet Apache die Prozesse nach dem Beantworten der Anfrage nicht sofort...
Ich rechne für die kommenden Tage mit doppelter Webserver-Belastung. Derzeit steht maxclients bei 512 - ich möchte aber gleich den maximal möglichen Wert berechnen und festlegen, um später nicht unter Druck zu kommen :-)

Übrigens ist das neukompilieren (zumindest unter Apache2) nicht notwendig. Du kannst über die Direktive ServerLimit in der httpd.conf den Maximalwert für maxclients einstellen. Neukompilieren ist nur bei einem gewünschten ServerLimit von über 20000 nötig - glaube aber nicht, dass das jemand braucht ;-)

Tomek
17.02.05, 13:24
Wie sieht denn deine Apache-Konfiguration aus? Insbesondere die Keep-Alive- und MPM-Settings...

lou_ziffer
17.02.05, 14:06
<IfModule prefork.c>
ServerLimit 512
StartServers 5
MinSpareServers 10
MaxSpareServers 256
MaxClients 512
MaxRequestsPerChild 0
</IfModule>

TimeOut 300

KeepAlive on
MaxKeepAliveRequests 100
KeepAliveTimeout 15


Gestern (maxclients war 256) dauerte das öffnen einer Seite zeitweise über eine halbe Minute (ich nehme an, er musste warten, bis wieder ein Prozess frei war um die Anfrage zu bearbeiten). Dabei ist mir aufgefallen, dass, wenn dann ein Prozess frei war, er die Seite gundsätzlich schnell lieferte, aber er manchmal dann doch für ein-zwei Grafiken extrem lange brauchte - obwohl KeepAlive schon auf on stand. Irgendwie deutet das aber darauf hin, daß er nicht persistente Verbindnugen benützt, sondern für jedes Element, jede Grafik), eine eigene Verbindung aufbaut. Kennst du vielleicht eine möglichkeit dies zu überprüfen?

pingu12
20.06.05, 16:40
gemacht und den wert 1055735808 (gesamter Speicher) durch den 8104 (Apacheprozessgröße???) dividiert und erhalte 130273 als maximale Anzahl der maxclients! Das kann doch nicht stimmen...
Was mache ich falsch? Vielleicht steh ich ja nur grad "auf der Leitung"... :-)

Ich bin zwar selber noch auf einem geringen Wissensstand aber bei den 8104 handelt es sich denke ich um kB während das andere B sind. Das würde dann bedeuten du kämst auf 130.

Wäre gut, wenn das mal jemand bestätigen (oder verneinen) könnte.

Gruß
Pingu12

marce
21.06.05, 07:08
ich persönlich finde MaxSpareServers=256 etwas heftig... 20 sollten da eigentlich reichen...

ansonsten frage ich mich, was bei uns komisch läuft - wir haben für diese Einstellungen eigentlich immer die Standardwerte drin (ok, MaxClients wird auf 256 gesetzt) - aber ansonsten - und das sind Webseiten, wo denke ich mal mehr Traffice laufen wird als auf den meisten der hier als "problematisch" beschriebenen... Oder rennt der 2er Apache um so viel schlechter wie der 1.3er?

Tomek
21.06.05, 08:41
Apache 2.0 ist nicht langsamer als Apache 1.3. Das gleiche Standard-Threadmodell prefork ist bei Apache 2.0 übrigens sogar etwas schneller, als bei Apache 1.3.

Ich empfehle folgende Dokumentationen:
http://httpd.apache.org/docs-2.0/de/mod/prefork.html
http://httpd.apache.org/docs-2.0/misc/perf-tuning.html