Besonders Speicherhungrig sind Apache und PHP. FCGI startet mehrere PHP-Instanzen um diese für Verarbeitung zur Verfügung zu stellen. Da das Schrauben an PHP zu Problemen mit der Erreichbarkeit deiner Site führen kann, erstmal nichts daran machen. Also weiter mit Apache...
wieviel Prozesse hast Du dann denn eingestellt. Prefork oder Worker-MPM? Letzterer ist für Multicore/CPU-System und legt viele Threads an. Das ist schneller aber braucht auch mehr RAM. Prüfe zuerst welcher MPM installiert ist mit aptitude!
Dann kannste in apache2.conf mal prüfen, dort finden sich Einstellungen zu mpm_prefork_module und mpm_worker_module.
Diese habe ich bei mir ausgetestet:
Code:
## really low setting
<IfModule mpm_worker_module>
StartServers 1
MaxClients 15
MinSpareThreads 3
MaxSpareThreads 7
ThreadsPerChild 3
MaxRequestsPerChild 200
</IfModule>
Alternativ:
Code:
## not too low setting
<IfModule mpm_worker_module>
StartServers 5
MaxClients 40
MinSpareThreads 5
MaxSpareThreads 20
ThreadsPerChild 10
MaxRequestsPerChild 5000
</IfModule>
Diese Werte liegen deutlich unter den Defaults. Ich komme damit aber zu 128-256 MB RAM-Auslastung.
Sollte das nicht reichen, kannst Du auch noch die RAM-Größe von jedem Thread begrenzen.
Code:
## memory size of every stack
ThreadStackSize 1500000
ACHTUNG: Man sollte wirklich wissen was man tut und was man braucht oder nicht braucht auf seinem Server! Weniger RAM heißt auch weniger Leistung für die Kunden! Mancher kanns verschmerzen, mancher nicht. Auch die Dokumentation rät dazu, soviel wie möglich min. bei den Defaults zu belassen.
Für MySQL gibt es ganz ähnliche Einstellungen, die ich aber nicht extra erwähne. Courier und Postfix brauchen auch je nach Userlast RAM.
Ich verwende Munin um Speicheranalyse zu betreiben und über längere Zeit hinweg verfolgen zu können, wie die Speicherlast auf dem System läuft. Natürlich geht auch Cacti gut, braucht aber wieder mehr RAM
.