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?
11
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.
dd if=/dev/zero of=swap.file bs=1024 count=1048576; mkswap swap.file; swapon swap.file
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.
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.
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:
Was ist der beste Weg, um mein Gedächtnis für meine Anwendung zu optimieren?
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
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.
quelle
Aus dem Dokument "Oracle 10g Server unter Red Hat® Enterprise Linux® 5 - Bereitstellungsempfehlungen".
Für 16 GB sollten Sie also nicht mehr als 4 GB Swap haben.
PS. Beachten Sie auch, dass der Aufruf
oom
fast immer besser ist als ein unbrauchbarer ausgelagerter Prozess mit der gesamten E / A-Bandbreite.quelle
Aktuelle CentOS Swap-Empfehlungen verwenden die folgende Formel:
Für 16G sollte der Swap-Betrag also 18G betragen.
Siehe http://www.centos.org/docs/5/html/Deployment_Guide-en-US/ch-swapspace.html
quelle
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)
quelle
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
quelle