Hallo,
bin noch ein Anfänger, und deshalb noch nicht so sonderlich bewandert. Deshalb bitte ich um etwas Nachsicht.
Jedenfalls hab ich mir nen Debian-Lenny-Webserver gestrickt, auf dem nun Apache 2.2.9 läuft. Das Dingen hat 1GB RAM.
Der Apache-Root-Prozess braucht ca 11800kB, die Unterprozesse zwischen 7750kB und 8600kB.
Ausserdem zieht sich der Apache-Prozess mal eben 250MB Shared Memory.
Wenn ich das richtig kapiert habe, braucht der Webserver ja für jede gleichzeitige http-Anfrage von Clients einen Kindprozess - richtig?
Folgende Module sind eincompiliert:
core
mod_log_config
mod_logio
prefork
http_core
mod_so
Über das Verzeichnis "mods-enabled" werden noch eingebunden:
alias, auth_basic, authn_file, authz_default, authz_groupfile, authz_host, authz_user, autoindex, deflate, dir, env, mime, negotiation, php5, setenvif.
Dass PHP5 ein Modul ist, das relativ viel RAM braucht, ist mir klar, aber das brauch ich nunmal.
In der apache2.conf steht noch folgendes:
ifModule mpm_prefork_module
StartServers 10
MinSpareServers 10
MaxSpareServers 30
MaxClients 100
MaxRequestsPerChild 5000
sowie:
ifModule mpm_worker_module
StartServers 10
MaxClients 100
MinSpareThreads 10
MaxSpareThreads 40
ThreadsPerChild 25
MaxRequestsPerChild 0
So, ich hoffe ich hab nun alle für die Speicherbelegung relevanten Daten gepostet.
Meine Fragen:
Ist diese Prozessgrösse normal? Mir kommt das recht viel vor. Sind irgendwelche Module überflüssig?
Mir ist klar, dass ich durch StartServers und die SpareServer beeinflussen kann, wieviel RAM der Apache im Leerlauf zieht. Aber mir gehts nich darum, daß der Apache möglichst wenig RAM beansprucht (weils n Webserver ist, soll er den RAM gerne haben), aber ich will, dass er den RAM dann auch effizient nutzt (also möglichst schlank ist) und schnell läuft, damit der Karren auch n bisschen was aushält.
Wieviel RAM schluckt ein Kindprozess bei nem schlanken Apache inkl PHP5-Modul?
Also für Verschlankungs- bzw.- Effizienztips wär ich dankbar! (sofern diese Speicherbelastung pro Kindprozess zu hoch sein sollte. vielleicht ists ja auch gut so, das weiss ich ja nicht - aber mir kommts halt viel vor).
Vielen Dank vorab!
Gruß
Markus
Apache schluckt zu viel RAM.... glaub ich
-
- Posts: 189
- Joined: 2009-11-04 00:43
- Location: NRW
-
- Userprojekt
- Posts: 169
- Joined: 2009-05-14 17:40
- Location: Halle (Saale)
Re: Apache schluckt zu viel RAM.... glaub ich
Hey,
hab gerade mal schnell meinen Indianer angeworfen.
hab gerade mal schnell meinen Indianer angeworfen.
Bei mir auch, ist also normal.coltseavers wrote:Der Apache-Root-Prozess braucht ca 11800kB, die Unterprozesse zwischen 7750kB und 8600kB.
Dazu kann ich nix sagen, hängt aber von ner Menge Faktoren ab.coltseavers wrote:Ausserdem zieht sich der Apache-Prozess mal eben 250MB Shared Memory.
Jein, kommt auf das mpm-modul an. Standardmäßig kann ein Kindprozess aber mehrere Anfragen abarbeiten. Die bei Apache als default eingetragenen Werte sind soweit im grünen Bereich, dass man sehr hohe Last fahren müsste, um an die Grenzen zu kommen. Und dann weiß man meistens, was man tut.coltseavers wrote:Wenn ich das richtig kapiert habe, braucht der Webserver ja für jede gleichzeitige http-Anfrage von Clients einen Kindprozess - richtig?
Last edited by papabaer on 2009-11-04 05:49, edited 1 time in total.
-
- Administrator
- Posts: 2639
- Joined: 2004-01-21 17:44
Re: Apache schluckt zu viel RAM.... glaub ich
Beziehen sich diese Werte auf real (RSS) oder virtuellen Speicher? Im übrigen sehe ich das wie PapaBaer, das ist für den Apache schon ein recht schlanker Memory Footprint.coltseavers wrote:Der Apache-Root-Prozess braucht ca 11800kB, die Unterprozesse zwischen 7750kB und 8600kB.
Ausserdem zieht sich der Apache-Prozess mal eben 250MB Shared Memory.
So grob. Etwas genauer: Dein Server verwendet das Prefork MPM-Modul. Das bedeutet, der Apache erzeugt bereits beim Starten eine von Dir festgelegte Anzahl von Kindprozessen (StartServers). Eingehende Requests werden im laufenden Betrieb zur Bearbeitung an die Kindprozesse durchgereicht. Wenn mehr Requests in der Queue stehen, als Kindprozesse verfügbar sind, kann der Apache innerhalb eines vorgegebenen Rahmens zusätzliche Kindprozesse erzeugen. Alle über den Rahmen hinausgehenden Requests werden aus der Queue heraus (Backlog) abgearbeitet. Außerdem ist es natürlich nicht korrekt, dass bei 10 Worker-Prozessen auch 10 Requests parallel bearbeitet werden - der Scheduler kann maximal so viele Prozesse parallel zur Ausführung bringen, wie Dein System CPU-Kerne bereitstellt.coltseavers wrote:Wenn ich das richtig kapiert habe, braucht der Webserver ja für jede gleichzeitige http-Anfrage von Clients einen Kindprozess - richtig?
Das hängt davon ab, was der Server tun soll. Du könntest mod_setenvif noch deaktivieren, wenn Du es nicht irgendwo nutzt. Die anderen Module stellen aber schon eine Minimalkonfiguration dar; da wird's schwer, noch was rauszuholen.coltseavers wrote:Ist diese Prozessgrösse normal? Mir kommt das recht viel vor. Sind irgendwelche Module überflüssig?
Unter dem Aspekt solltest Du eventuell erwägen, anstelle des Prefork MPM-Moduls das Worker MPM-Modul einzusetzen. Im Worker-Modul werden die einzelnen Prozesse besser ausgenutzt, da jeder Prozess sich wiederum in Threads aufteilt. Pro Thread kann auch ein Request (pseudo-)parallel bearbeitet werden, aber mit wesentlich weniger Overhead als bei dedizierten Prozessen. Im Klartext: Bei mpm_worker kommt man mit weniger Prozessen aus als bei Prefork, um dieselbe Responsiveness zu erzielen und nutzt so die gegebenen Ressourcen besser aus.coltseavers wrote:Mir ist klar, dass ich durch StartServers und die SpareServer beeinflussen kann, wieviel RAM der Apache im Leerlauf zieht. Aber mir gehts nich darum, daß der Apache möglichst wenig RAM beansprucht (weils n Webserver ist, soll er den RAM gerne haben), aber ich will, dass er den RAM dann auch effizient nutzt (also möglichst schlank ist) und schnell läuft, damit der Karren auch n bisschen was aushält.
Es gibt Webserver, die wesentlich schlanker implementiert sind als Apache (z. B. Lighttpd, NGinx, Gatling, ...) und die ebenfalls gut dafür geeignet sind, PHP-Seiten auszuliefern. Mit NGinx und PHP via FastCGI sowie einem anständigen Opcode-Cache sollte da noch einiges rauszuholen sein.coltseavers wrote:Also für Verschlankungs- bzw.- Effizienztips wär ich dankbar! (sofern diese Speicherbelastung pro Kindprozess zu hoch sein sollte. vielleicht ists ja auch gut so, das weiss ich ja nicht - aber mir kommts halt viel vor).
“Some humans would do anything to see if it was possible to do it. If you put a large switch in some cave somewhere, with a sign on it saying 'End-of-the-World Switch. PLEASE DO NOT TOUCH', the paint wouldn't even have time to dry.” — Terry Pratchett, Thief of Time
-
- Posts: 189
- Joined: 2009-11-04 00:43
- Location: NRW
Re: Apache schluckt zu viel RAM.... glaub ich
vielen Dank für die Antworten!
Dann muß ich wohl bei Gelgenheit mal schauen, wie ich das prefork-mpm-modul durch das worker-mpm-modul ersetze und einkompiliere. Für nen Anfänger wie mich ne schöne Herausforderung :-)
Danke nochmal & Gruß,
Markus
Dann muß ich wohl bei Gelgenheit mal schauen, wie ich das prefork-mpm-modul durch das worker-mpm-modul ersetze und einkompiliere. Für nen Anfänger wie mich ne schöne Herausforderung :-)
Danke nochmal & Gruß,
Markus
-
- Posts: 5923
- Joined: 2004-05-23 12:53
Re: Apache schluckt zu viel RAM.... glaub ich
Wieso immer so umständlich? Die Paketverwaltung deiner Distribution bietet alles, was du brauchst...