Sollte ich Swap für Linux Webserver komplett ausschalten?

22

Kürzlich sagte mir mein Freund, dass es eine gute Idee ist, Swap auf Linux-Webservern mit genügend Speicher zu deaktivieren. Mein Server hat 12 GB und verwendet derzeit 4 GB (ohne Cache und Puffer) bei Spitzenlast.

Sein Argument war, dass in einer normalen Situation der Server niemals den gesamten Arbeitsspeicher nutzen wird, so dass die einzige Möglichkeit, auf die OutOfMemory-Situation zu stoßen, auf einen Fehler / ddos ​​/ etc zurückzuführen ist. So im Falle Swap ausgeschaltet off - System wird der Speicher ausgehen , die schließlich das Programm Hamstern Speicher abstürzen (höchstwahrscheinlich der Web - Server - Prozess) und wahrscheinlich einige andere Prozesse. Im Fall Swap eingeschaltet aufEs frisst sowohl RAM als auch Swap und führt letztendlich zum selben Absturz. Zuvor werden jedoch wichtige Prozesse wie sshd für den Swap ausgelagert und viele Swap-Vorgänge ausgeführt, was zu einer erheblichen Verlangsamung führt. Auf diese Weise kann das System unter ddos ​​aufgrund von großen Verzögerungen völlig unbrauchbar werden und ich kann mich wahrscheinlich nicht anmelden und den Webserver-Prozess beenden oder den gesamten eingehenden Datenverkehr ablehnen (außer ssh).

Ist das richtig? Vermisse ich etwas (wie die Tatsache, dass Swap-Partition in irgendeiner Weise sehr nützlich ist, auch wenn ich genug RAM habe)? Soll ich es ausschalten?

Poma
quelle
6
Alle Antworten beschränken sich auf die folgenden Aussagen: 1. Mehr virtueller Speicher ist unbedingt besser als weniger, und 2. Es muss ein Swap aktiviert sein, da keiner von beiden gut fundiert ist.
NekojiruSou
2
Es ist falsch anzunehmen, dass Swap ausschließlich für die 'Reservierung' von Speicher gedacht ist. Swap ist für einen Ort gedacht, an dem nicht verwendeter Speicher abgelegt werden kann (damit Sie Ihren tatsächlichen Speicher effizienter nutzen können). Sie sollten immer Swap haben. Wenn Ihnen das Gedächtnis ausgeht, dann haben Sie kein Gedächtnis mehr - Zeitraum. Dies ist ein Problem des Kapazitätsmanagements - keine Tendenz zum Tausch. Ich habe eine ziemlich lange Antwort serverfault.com/a/332205/75118 , die versucht, die Absichten des virtuellen Speichers besser zu erklären.
Matthew Ife

Antworten:

27

Ich würde sagen, es hängt von Ihrem Anwendungsfall ab und der Rest der Antworten hat dies ziemlich gut abgedeckt. 4G Swap sind immerhin ein billiger Weg, um etwas Sicherheit zu kaufen. Und ich fühle, dass diese Billigkeit die Leute dazu bringt, es nicht ausschalten zu wollen.

Aber lassen Sie mich mit einer rhetorischen Frage antworten. Wenn Geld kein Thema ist und Sie die Wahl zwischen zwei Systemen haben - einem mit 12 GB RAM und 4 GB Swap und einem anderen mit 16 GB RAM und ohne Swap - welches würden Sie wählen? Leider würden die meisten Leute immer noch antworten, dass sie 16G RAM wählen und immer noch 4G Swap hinzufügen würden, was meinen Standpunkt verfehlt.

Und in einem anderen Punkt finde ich persönlich ein Swap-System schlimmer als ein abgestürztes System. Ein abgestürztes System würde dazu führen, dass ein Standby-Sicherungsserver viel früher die Kontrolle übernimmt. Und in einer Aktiv-Aktiv-Konfiguration (oder einer Konfiguration mit Lastenausgleich) würde ein abgestürztes System viel früher außer Rotation geraten. Wieder ein Gewinn für das No-Swap-System.

Chutz
quelle
14

Es wird NICHT empfohlen, Swap zu deaktivieren, auch wenn Sie über genügend Arbeitsspeicher verfügen. Wenn Ihr Server mehr Arbeitsspeicher benötigt und diesen nicht erhalten hat, stürzt er ab. Dies kann jedoch (bis zu einem gewissen Grad) verhindert werden, wenn Sie einen Swap-Bereich haben.

Ja, Ihre Serverleistung wird durch die Verwendung von Swap beeinträchtigt, aber zumindest wird es betriebsbereit und zugänglich sein. Sie können dann planen, bei Bedarf mehr Speicher hinzuzufügen, wenn Ihr Server Swap verwendet.

Ich fand diese Seite über Tausch. Schauen Sie sich den 3. Abschnitt an.

Anstatt Swap auszuschalten, können Sie die Swapiness steuern .

Khaled
quelle
1
In der beschriebenen Situation wird es sowohl Swap als auch RAM verbrauchen und auch abstürzen. Es läuft einige Monate und hat nie mehr als 30% des Speichers verbraucht. Es ist daher sehr unwahrscheinlich, dass es im normalen Betrieb so schnell auf 100% springt. Wenn also ein Prozess verrückt geworden ist und 8 GB verbraucht hat, bedeutet dies, dass er so viel Speicher verbraucht, wie das Betriebssystem kann.
Poma
@Poma, Swap bietet noch weitere Vorteile. Außerdem können Sie dem System eine längere Lebensdauer gewähren, wenn Sie einen Swap haben. Dies liegt daran, dass der Swap aufgrund der Verfügbarkeit billiger HD-Laufwerke größer als der Arbeitsspeicher sein kann.
Khaled
6

Nein, das ist keine gute Idee. "Ein Prozess ist verrückt geworden" bedeutet, dass Sie proaktiv bereits angerufen haben sollten

ulimit -d

Zum oder vor der Prozesserstellungszeit, um ein Limit für den Speicher pro Prozessdatensegment festzulegen - und möglicherweise ein Limit für die Anzahl der Threads

ulimit -T

pro Prozess. ulimit ist dein Freund. Bitte lesen Sie eine der Anleitungen zur Speicheroptimierung, bevor Sie den Swap ausschalten. Sie können Kernel-Parms auch auf einige Dinge ändern, um zu versuchen, DOS-Angriffe oder schlechte Programme zu behandeln.

Betrachten Sie es so: Der gesamte Arbeitsspeicher auf Ihrem System ist RAM + Swap. Wenn Sie über 12 GB Swap verfügen, halbieren Sie die System-VM-Kapazität, indem Sie Swap deaktivieren. Schlechte Idee. Dies ist eigentlich keine Debatte, es handelt sich lediglich um eine Lektüre dessen, was andere Menschen aus früheren schlechten Erfahrungen über Jahre hinweg gewusst haben. Möglicherweise muss Ihr Freund auch etwas lesen.

Jim Mcnamara
quelle
5

Wie bereits erwähnt, können Sie Ihren Server mithilfe von Swap effektiv stoppen, es sei denn, dies ist unbedingt erforderlich, indem Sie den Parameter "swappiness" verwenden. Hiermit wird gesteuert, wie aggressiv der Kernel Speicherseiten auslagert.

Sie können sehen, auf was es aktuell eingestellt ist:

cat /proc/sys/vm/swappiness

und du kannst es "live" bearbeiten mit (als root):

# echo "10" > /proc/sys/vm/swappiness

Fügen Sie Folgendes zu /etc/sysctl.conf hinzu, damit es bestehen bleibt:

vm.swappiness=10
Orlando Richards
quelle
2

Sie können auch mit zRAM in den Arbeitsspeicher wechseln. Ich denke, das ist eine großartige Idee! Für die Leistung ist wie überhaupt kein Swap, sondern verhindert auch die Abstürze, wenn das System sehr belastet ist!

Schau dir das an:

http://www.webupd8.org/2011/10/increased-performance-in-linux-with.html

Meine Erfahrung: Auf dieser Maschine, auf der ich gerade schreibe, habe ich den Swap deaktiviert, weil ich 4 GB RAM habe (2009 war es viel!). Ich hatte nur ein paar Probleme, eines davon öffnete versehentlich wie 127 Bilder gleichzeitig!

ABER .. das ist eine Workstation, und ich kann es mir leisten, neu zu starten, wenn es hängt. In einem Server denke ich, ist es besser, Swap zu haben, und der Swap-in-RAM klingt gut für mich.

CyberPlant
quelle
1

Wie bereits ausführlich dargelegt, ist dies keine gute Idee. Wenn nichts anderes, gibt dir Swap eine Atempause, wenn die Dinge nicht ganz normal sind. Ich schaue zB auf einem System, das normalerweise nur wenige Besucher pro Tag hat, gab es einen massiven Traffic-Anstieg, der durch die Erwähnung einer Seite in einer Zeitschrift verursacht wurde. Dies führte dazu, dass der Webserver zum ersten Mal seit seiner Inbetriebnahme Swap Space nutzte. Ohne diesen Swap Space wäre es nicht sehr gut gelaufen.

John Gardeniers
quelle
0

Keine gute Idee. Sie können 2 Auslagerungsdateien mit unterschiedlicher Priorität definieren. Eine kleinere, die verwendet wird, und eine größere, die verwendet wird, falls die erste gefüllt wird.

Mit vm.swappiness können Sie außerdem steuern, wie aggressiv der Plattenaustausch erfolgt.

Dragos
quelle
0

Wenn Sie eine 0 in vm.swappiness einfügen, bedeutet dies nicht unbedingt, dass das System nicht ausgetauscht wird. Es ist ein Parameter, um zu bestimmen, wie aggressiv die Tendenz von Kernes ist, zu tauschen, aber es schaltet Swap nicht aus.

Auch hier ist das Tauschen nicht schlecht, aber das Dreschen. Werfen Sie einen Blick auf die sysstat-Daten und das sollte einen ziemlich guten Hinweis darauf geben.

Soham Chakraborty
quelle