CentOS Wie viel SWAP für 16 GB RAM?

11

Wie viel SWAP würden Sie einer CentOS-Installation auf einem Dual Quad Core XEON mit 16 GB RAM geben, auf dem eine PHP-Website mit einem MySQL-Backend ausgeführt wird - mittlere / hohe Last?


quelle

Antworten:

20

Nicht mehr als ein oder zwei Konzerte - Sie möchten ein bisschen Swap zur Verfügung haben, nur für den Fall und weil es dazu beiträgt, dass die Dinge ein bisschen besser funktionieren, aber wenn Sie jemals an den Punkt kommen, an dem Sie stark tauschen, läuft die Maschine um nutzlos zu sein - und in einer wirklich katastrophalen Situation sind Sie mit einem kleineren Swap Space besser dran, denn dann werden Sie den OOM-Killer eher früher als später auslösen.

Genehack
quelle
7
Und denken Sie daran, dass Sie später jederzeit mehr Swap-Speicherplatz hinzufügen können, wenn dies erforderlich ist, indem Sie Speicherplatz schaffen und ein neues Volume erstellen (wenn Sie LVM verwenden) oder eine Datei als Swap mit so etwas wiedd if=/dev/zero of=swap.file bs=1024 count=1048576; mkswap swap.file; swapon swap.file
David Spillett
3
Als Randnotiz können Sie den Grad des Austauschs steuern, indem Sie den Wert / proc / sys / vm / swappiness anpassen.
David
2
Ich muss hier mit ein paar Punkten nicht einverstanden sein. . . Erstens ist die Festplatte billig, Sie können auch ein paar GB darauf werfen. Zweitens kann der OOM-Killer Ihre ganze Kiste ausschalten, wenn Sie Pech haben. Sich in irgendeiner Weise darauf zu verlassen oder es für besser zu halten, den OOM-Killer auszulösen, ist eine sehr schlechte Idee. Es ist auch eine schlechte Idee zu denken, dass eine potenziell abgespritzte Box besser ist als eine potenzielle Verlangsamung. Die einzige Zeit, die vernünftig wäre, wäre, wenn Sie ein sehr spezifisches Setup für diese Situation geplant hätten.
Christopher Cashell
Nebenbei bemerkt, es ist im Allgemeinen vorzuziehen, Swap auf eine Partition und nicht auf eine Datei festzulegen, um Overheads zu vermeiden und den Startvorgang zu vereinfachen. Die Verwendung einer Datei funktioniert jedoch. 4 GB sind alles, was ein System benötigen sollte. Ich bezweifle, dass Sie mit 16 GB RAM ohnehin viel ausgetauscht werden
Silverfire
Laut Andrew Morton sollte die Leistung zwischen einer Swap-Datei
Journeyman Geek
8

Ich entschuldige mich für die sehr lange Antwort. Ich wollte dieses Zeug schon seit einiger Zeit an einem zugänglichen Ort aufbewahren!

TLDR; Theoretisch wäre die Antwort "wahrscheinlich nicht weniger als die Gesamtmenge an residentem Speicher, die alle Ihre Anwendungen verwenden möchten".

Ich werde versuchen zu erklären, ob du bei mir bleibst.

Ein bisschen über den virtuellen Speicher

Ich bin der Meinung, dass es heutzutage ein weit verbreitetes Missverständnis darüber gibt, welchen Wert Swap hat und wozu er dient. Es wird oft angenommen, dass Swap als 'Reservebank' für Speicher gedacht ist, wenn Ihnen der Speicher ausgeht. Ja, dies ist teilweise richtig, aber der Kernel möchte Ihren Swap nicht als Reservebank verwenden . Außerdem möchte der Kernel niemals die Festplatte aufrufen, um die Daten zu erhalten, nach denen Sie suchen!

Im Anwendungsbereich gibt es eine Reihe von Dingen, die der Kernel im Speicher behalten wird.

  • Zugeordnete Dateidaten.
  • tmpfs Dateisysteme.
  • Roher Anwendungsspeicher zur Laufzeit zugewiesen.
  • Anwendungscode (z. B. Daten im Datensegment von ELF-Formaten)
  • Privat gemapte Dateidaten.

Zum Zweck der Speicherverwaltung, Speicherzuweisung ist gesichert in einer oder anderen Form von einer Stützvorrichtung.

Dateisicherer Speicher ist Speicher, der aus einer Datei stammt und auf einem typischen Betriebssystem den größten Teil der Speicherzuweisung auf dem System ausmacht. Es enthält Dateien wie gemeinsam genutzte gemeinsam genutzte Bibliotheken, Dateien, die von der Festplatte gelesen und im Seitencache gespeichert wurden, und Dateien, die von der Festplatte mmapiert wurden (tatsächlich unterscheidet der Kernel Seiten nicht zwischen Dateien im Seitencache und Dateien, die im Wesentlichen zugeordnet sind das gleiche).

Das Tolle an diesem Speicher aus Kernel-Sicht ist, dass er verfügbar ist. Das heißt, es sollte möglich sein, diese Seiten zu sichern, wenn Sie den Speicher für etwas anderes benötigen, und genau das tut der Seiten-Cache, wenn plötzlich Speicher erforderlich ist.

Anonym gesicherte Erinnerung ist eine andere Sache. Der Speicher aus dieser Region ist anonym, da sich auf der Festplatte keine Datei befindet, die diese Daten tatsächlich enthält. Dies besteht normalerweise aus dem Anwendungsstapel, dem Heap, allem in tmpfs und mmapped-Daten, was privat ist und geändert wurde (da es dieses Zeug nicht zurück auf die Festplatte synchronisieren kann). Da es im Dateisystem nur keine gültige Datei gibt, in die diese Seiten zurückgeschrieben werden können, wenn sie sich ändern, wird der anonym gesicherte Speicher von den Auslagerungsmedien gesichert.

Jetzt weiß der Kernel, dass es bei knappem Speicher weitaus billiger ist, den anonym zugeordneten Speicher auf dateibasierten Speicher zu verzichten, da anonyme Daten eine viel höhere Wahrscheinlichkeit haben, "schmutzig" zu sein als dateibasierte Daten, standardmäßig der Kernel bewertet anonym gesicherten Speicher als 80-mal wertvoller als dateibasierten Speicher, und genau das macht der Swappiness-Modifikator unter Linux (siehe diesen Beitrag hier, wenn Sie wissen möchten, was genau der Swappiness-Parameter ändert).

Das schlimmste Szenario

Das schlimmste Szenario, wenn ein Server außer Kontrolle gerät und OOMing ausgeführt wird, beruht auf der Tatsache, dass er viel zu viel Zeit mit der Bearbeitung von E / A-Anforderungen verbringt als mit der Erfüllung von Speicherzuweisungsanforderungen. Es gibt zwei Bedingungen, die dieses Kriterium aufrufen können.

  • Durchgehend den anonymen Speicher austauschen, um nachgefragte Seiten abzurufen oder mehr Seiten für eine Anwendung zuzuweisen.
  • Verbringen Sie zu viel Zeit damit, Daten von der Festplatte abzurufen, da sie sich nicht im Speicher befinden, als Sie für die Ausführung von Prozessen angeben, die CPU-Zeit benötigen.

Das erste ist das allgemein angenommene Problem. Das heißt, da so viel Speicher im Swap vorhanden ist, muss der anonyme Speicher aus dem RAM ausgelagert, wieder in den Swap zurückgesetzt, dann etwas aus dem Swap entnommen und in den echten RAM gestellt werden. Dieser Vorgang ist sehr teuer und verlangsamt den Computer bis zu einem Punkt, an dem er zu einer nicht behebbaren Situation werden kann (da mehr Daten für Seitenanforderungen anstehen, als über E / A bereitgestellt werden können).

Der zweite wird weniger berücksichtigt, ist aber genauso wichtig. Wenn Sie fast Ihren gesamten Speicher realen Anwendungsdaten zuordnen, halten Sie nicht lange. Nahezu jede Anwendung ist zum Lesen auf das Lesen von Dateien aus dem Dateisystem angewiesen. Dies kann daran liegen, dass einige Anweisungen in einer gemeinsam genutzten Bibliothek gespeichert sind oder dass Sie /etc/resolv.conf für einen Bibliotheksaufruf oder einen anderen Zweck lesen müssen. Es ist durchaus plausibel, ein Betriebssystem anzuhalten - und verfügt dennoch über genügend Arbeitsspeicher für alle Ihre Anwendungen. Da jedoch so viele E / A-Anforderungen in die Warteschlange gestellt werden, kann nichts ordnungsgemäß abgeschlossen werden.

Was der Kernel mit Ihrem Swap machen will

Der Kernel möchte Ihren Swap verwenden, um Seiten zu entfernen, die Speicher verschwenden, damit er diesen Speicher für etwas anderes verwenden kann.

Grundsätzlich füllt der Kernel im normalen Betrieb den Seitencache gerne aggressiv mit Daten, die von der Festplatte gelesen werden. Dies bedeutet, dass die Festplatte nicht für dieselben Daten gelesen wird. Dies ist ein gutes Design und kann die E / A massiv reduzieren. Nun kann es sein, dass Sie eine Anwendung im Speicher haben, die 3 Tage lang schläft, aufwacht, eine Menge Arbeit erledigt und dann weitere 3 Tage schläft.

Der Kernel möchte diese Daten austauschen, um stattdessen Platz für Dateisystemaktivitäten zu schaffen, da Sie eine viel höhere Wahrscheinlichkeit haben, diese Seiten tatsächlich häufiger zu verwenden als die Seiten, die Sie für Ihre Anwendung verwenden. Swapping, in diesem Sinne könnte eine 16kb Transaktion auf Ihre Swap - Medien sein , die man sich kaum fühlen sollte, aber im Gegenzug befreien Sie 16kb von Speicher bis denen könnten verwendet werden , um vier Dateien im Wert von Daten zu speichern.

Wofür der Kernel Swap nicht verwenden möchte

Der Kernel möchte Ihren Swap definitiv nicht verwenden, um mehr anonymen Speicher zuzuweisen, indem er einen anderen anonymen Speicher austauscht. Dies ist die Situation, über die sich die Leute am meisten Sorgen machen, und das zu Recht.

Ich möchte jedoch darauf hinweisen, dass, wenn Sie so viel Speicher zugewiesen haben, dass der Kernel keine andere Wahl hat, als dies zu tun, dies ein Konfigurationsproblem der Systemadministratoren ist, nicht des Kernels selbst - es wird nur versucht, das Beste aus dem herauszuholen Optionen, die Sie gegeben haben!

Wenn Sie eine große Menge an Swap haben, erhöhen Sie die Chance, dass Sie ihn nutzen?

Nein! Wenn Sie 1 G RAM und 4 G Swap haben, besteht keine 80% ige Chance, dass Ihre Daten ausgetauscht werden! Der Kernel möchte den Swap nur verwenden, wenn Seiten im Speicher besser bedient werden können, um etwas anderes zu tun!

Ist es vorteilhaft, überhaupt keinen Swap zu verwenden?

Ich würde das niemals tun. Durch das Austauschen kann das Betriebssystem den Speicher entfernen, den Sie benötigen, der jedoch nie verwendet wird. Wenn Sie keinen Swap haben, wird Ihr Speicher nur verschluckt, und Sie werden möglicherweise nie eine signifikante Leistungsverbesserung feststellen, wenn Sie beispielsweise zulassen, dass der Seitencache ihn stattdessen hat.

Was ist der beste Tausch?

Finden Sie theoretisch heraus, wie viel residenter Speicher + 20% für Sicherheitsmaßnahmen wie wiedereintretende Bibliotheksaufrufe, die Speicher vom Heap zuweisen müssen, und setzen Sie dann Ihren Swap auf diesen Betrag. Dies würde (theoretisch sowieso) dem Betriebssystem ermöglichen, den gesamten anonymen Speicher auszutauschen, wenn es Platz für etwas Nützlicheres machen müsste.

Wenn ich die Kernel-Gelegenheit bekomme, alles auszutauschen, was gefährlich ist, oder?

Denken Sie daran, dass der Kernel nicht tauschen möchte, um Platz für eine anonymere Speicherzuweisung zu schaffen. Er tauscht immer nur nicht verwendete Seiten aus, um etwas anderes zu bevorzugen, das den Speicherplatz besser nutzt.

Wenn Sie den anon-Speicher nur austauschen, um ihn aus einem anonymeren Speicher zuzuweisen, machen Sie etwas falsch und benötigen mehr RAM oder müssen Ihren Anwendungsstapel trotzdem neu abstimmen.

Wie viel RAM würden Sie benötigen

Sie müssen natürlich genügend RAM zulassen, um alle Ihre Anwendungen ausführen zu können, aber Sie sollten wahrscheinlich zusätzliche 2 GB RAM zulassen, damit der Pagecache voll wird - vielleicht mehr. Durch den Seiten-Cache wird Ihr Computer viel schneller und Ihre Festplatten halten länger. Wenn Sie daran denken, einen Webserver zu betreiben, ist es eine gute Idee, noch mehr für den Seitencache zu haben, da Sie eine Menge statischen Inhalts aus dem Seitencache abrufen und wiederverwenden können, der ausgeliefert wird (wenn Ihr Webserver-Durchsatz 5 MB / s beträgt, tun Sie das wirklich nicht Ich möchte doch den 5 MB / s-Inhalt abrufen, den Sie von Ihrer Festplatte generiert haben!).

Was tun, wenn Sie Linux nicht wirklich vertrauen, um richtig zu tauschen?

Wenn Sie wirklich besorgt sind, können Sie mehr Speicher zuweisen als Sie haben:

  • Stellen Sie Ihren Swap-Betrag so ein, dass er nicht mehr als Ihr RAM beträgt
  • Setzen Sie / proc / sys / vm / overcommit_memory auf 2
  • Setzen Sie / proc / sys / vm / overcommit_ratio auf einen Wert, der die physischen RAM-Grenzen niemals überschreiten kann. In der Kernel-Dokumentation finden Sie Informationen zu dieser Nummer.

Was ist der beste Weg, um mein Gedächtnis für meine Anwendung zu optimieren?

  • Verstehe, was Swappiness eigentlich macht.
  • Verwenden Sie CGroups, um die richtigen Ressourcen pro Anwendung zuzuweisen.
  • Ändern Sie den oben genannten Overcommit-Modus, damit das Betriebssystem strenge Grenzwerte einhält.
  • Verwenden cgroups wie oben Satz OOM Prioritätsachsen auf Anwendungen , die Sie wirklich wollen , zu halten , wenn Ihr aus der Erinnerung und Anwendung , die Sie wirklich zu Graben wollen , wenn Ihr aus dem Speicher.

Der Hersteller empfiehlt eine andere Konfiguration.

Hören Sie sich das stattdessen an. Einige Anwendungen sind so geschrieben, dass sie den Kernel absichtlich aufrufen, damit ihre Seiten über allen anderen aktiv sind. Dies ist ein böser Trick, um ehrlich zu sein, aber er beeinträchtigt die Fähigkeit des Kernels, den Speicher in diesem Fall nahtlos zu verwalten. Wenn Ihr Anbieter Ihnen Einzelheiten angibt, fallen diese wahrscheinlich in diese Kategorie und hören stattdessen zu, was sie sagen.

in Summe

  • Swap soll als Ort verwendet werden, an dem Speicherplatz verschwendet wird. Nicht als "Ersatzspeicher"
  • Wenn Sie große Mengen an Swap haben, hat dies keinerlei Auswirkungen auf Ihre Chancen, ihn zu nutzen.
  • Der Kernel möchte Sie wirklich daran hindern, auf die Festplatte für Ihre Daten zuzugreifen. Dies gilt genauso - wenn nicht gleichberechtigter für den Seiten-Cache wie für den Speicherplatzaustausch.
  • Der Kernel wird sein Bestes geben, um die Einstellung zu berücksichtigen, die Sie den von Ihnen ausgeführten Apps geben. Aber wundern Sie sich nicht, wenn Sie OOM haben, wenn Sie 500 Apache-Kinder haben, die alle 32 Millionen Speicher belegen. Dies ist ein Fehler der von Ihnen gewählten Konfiguration, nicht der Speicherverwaltung.

Der Kernel verwaltet den virtuellen Speicher normalerweise sehr gut. Es ist fast immer so, dass Ihre Anwendung mehr Speicher reserviert, als Sie möglicherweise erhoffen könnten, und genau das verursacht einen OOM.

Swap wurde früher als "Ersatzspeicher" verwendet, ist aber nicht mehr der Hauptzweck. Denken Sie also nicht daran, ihn so zu verwenden. Beachten Sie stattdessen, dass Ihr Kernel wahrscheinlich am besten weiß, wofür er Ihren Speicher verwenden möchte. Geben Sie ihm Raum, um diese Entscheidungen zu treffen, und Sie profitieren von einer allgemeinen Leistungsverbesserung.

Matthew Ife
quelle
2

Aus dem Dokument "Oracle 10g Server unter Red Hat® Enterprise Linux® 5 - Bereitstellungsempfehlungen".

Oracle bietet allgemeine Empfehlungen zur Größe des Swaps in MetaLink Note 169706.1. Diese Empfehlungen können dazu führen, dass auf Systemen mit viel Speicher sehr viel Swap-Speicherplatz erstellt wird. Der sehr große Swap kann zu einer starken Verschlechterung der Systemleistung führen und durch Reduzierung des Swap-Speicherplatzes behoben werden. Red Hat empfiehlt nicht, mehr als 4 GB für den Austausch unter Red Hat Enterprise Linux 5 zuzuweisen.

Für 16 GB sollten Sie also nicht mehr als 4 GB Swap haben.

PS. Beachten Sie auch, dass der Aufruf oomfast immer besser ist als ein unbrauchbarer ausgelagerter Prozess mit der gesamten E / A-Bandbreite.

SaveTheRbtz
quelle
-1

Soweit ich mich aus der Linux-Dokumentation erinnere: Wenn Ihr RAM größer als 2 GB ist, tauschen Sie = (ramSize + 2) aus. Wenn es weniger ist, tauschen Sie = (ramSize * 2)

MKN Web Solutions
quelle
-2

Ich habe dieses Dokument für Sie gefunden. Es sollte Ihnen helfen, diese Entscheidung zu treffen. Hier ist es: Was ist Swap Space? , aber keine der obigen Antworten ist richtig

Alexus
quelle
1
Das Dokument, auf das Sie verlinkt haben, stimmt nicht mit sich selbst überein. Das Befolgen der angegebenen Regel "für mehr die 2-Gbit-RAM-Menge von RAM über 2 Gbit" würde einen 1-Gbit-Tausch für 3-Gbit-RAM (3-2 = 1) ergeben, nicht für 5 Gbit.
David Spillett