Apache Heavy Load VIRT vs RES Speicher

8

Ich habe einen Debian 5-Server, der viel Verkehr bekommt. Derzeit verfügt der Server über 4 GB RAM und keinen Swap-Speicher. Ich sehe oben, dass Apache-Prozesse jeweils ungefähr 180 MB virtuellen Speicher (VIRT) und 16 MB realen RAM (RES) verbrauchen. Wie viele Apache-Threads kann ich gleichzeitig ausführen? Über 4 GB / 180 MB = 22 oder 4 GB / 16 MB = 256?

pako
quelle

Antworten:

10

Die Größe des virtuellen Speichers ist nicht so wichtig wie die Ihres Resident-Sets. Der virtuelle Speicher wird Dinge enthalten, die zugeordnet sind, wie z. B. gemeinsam genutzte Bibliotheken und so weiter (die nur einmal im physischen RAM gespeichert werden). RSS sagt Ihnen, was tatsächlich im Speicher ist, wo als Virt. gibt an, wie viel des verfügbaren virtuellen Adressraums verschluckt wurde.

Ihre zweite Berechnung wird näher sein, obwohl sie ziemlich niedrig ist. Auf einem Server mit 4 GB RAM können weit mehr als 256 Apache-Prozesse ausgeführt werden. Abhängig von Ihren Verkehrsmustern und Einschränkungen bei der E / A-Wartezeit ist es möglicherweise eine gute Idee, mehr als 256 auszuführen, da eine große Anzahl dieser Prozesse möglicherweise nur darauf wartet, dass der Kernel Daten von Gerät zu Gerät schaufelt. Berücksichtigen Sie auch Dinge wie COW und die Tatsache, dass alles auf dieselbe 'httpd'-Binärdatei verweist und Sie mehr Effizienz erzielen.

Erstellen Sie jetzt Ihr System mit gut 2 GB Swap-Speicherplatz neu. Swap fungiert nicht mehr nur als "langsames Gedächtnis".

Als Haftungsausschluss: Es ist lange her, dass ich mich um die Besonderheiten der Linux-Speicherverwaltung gekümmert habe, und meine Fakten sind möglicherweise ein wenig falsch, aber das Wesentliche ist solide!

McJeff
quelle
Warum können weit mehr als 256 Apache-Prozesse ausgeführt werden? Ich habe Anwendungen, die 8 GB nur um 8 laufen können.
GCB
-1. "Ein Server mit 4 GB RAM kann weit mehr als 256 Apache-Prozesse ausführen" mit seinen 16 MB pro Prozess führt dies zu einem Austausch, was nach allen Leistungsrichtlinien, die zu diesem Thema gelesen wurden, eine Hauptsünde ist.
Ziege
Was passiert, wenn Sie 4 GB JVM-Heap (mit unbegrenzten Threads) auf einem System mit insgesamt 16 GB RAM ausführen und melden free, dass der gesamte Speicher voll ist? 0 oder ein paar 100mb freier Speicher? Was ist ein gutes Verhältnis von verwendetem / freiem Speicher für einen JVM- "Container"?
Niken
1

Dieser Wert ist hauptsächlich auf das Experimentieren mit Ihrer aktuellen Serverlast zurückzuführen.

Versuchen Sie, einige Daten mit 'Apache Top' zu sammeln. Nehmen Sie einige Konfigurationsänderungen vor und versuchen Sie es erneut. Da ich Ihren speziellen Anwendungsfall nicht kenne, ist es schwierig, konkrete Zahlen zu finden.

Wenn Sie einen vorhersehbaren Speicherverbrauch für Ihren Webserver wünschen, besuchen Sie bitte http://wiki.nginx.org/Main

Es löst einige Skalierbarkeitsprobleme auf sehr coole Weise.

Es ist nicht für jeden Anwendungsfall richtig, aber denken Sie darüber nach.

Sie können es bereitstellen, um die Belastung Ihrer Apache-Instanz zu verringern. Es eignet sich zum Bereitstellen von statischen Inhalten und Cache-Inhalten in einer Reverse-Proxy-Konfiguration sowie für andere Szenarien mit hoher Auslastung.

Probieren Sie es aus, es ist kostenlos :-)

Der Unix-Hausmeister
quelle