it-swarm.com.de

Warum Swap verwenden, wenn mehr als genug freier Speicherplatz im RAM vorhanden ist?

Verwenden von Swap Speicherplatz anstelle von RAM kann drastisch verlangsamen einen PC.

Warum verwendet mein Linux-System (Arch) den Swap, wenn ich mehr als genug RAM verfügbar) habe?

Überprüfen Sie meine Conky-Ausgabe unten:

conky output

Könnte dies auch die Ursache für Probleme mit der Geschwindigkeit und der Systemreaktivität sein, die ich habe?

Ausgabe von free -m:

$ free -m
             total       used       free     shared    buffers     cached
Mem:          1257       1004        252          0         51        778
-/+ buffers/cache:        174       1082
Swap:          502        144        357
132
Stefan

Es ist normal, dass Linux-Systeme some swap verwenden, auch wenn noch RAM frei) ist. Der Linux-Kernel wechselt, um Speicherseiten auszutauschen, die sehr selten verwendet werden (z , die getty Instanzen, wenn Sie nur X11 und einen anderen inaktiven Daemon verwenden).

Die Nutzung des Swap-Speicherplatzes wird zu einem Problem nur wenn nicht genügend RAM verfügbar,) vorhanden ist und der Kernel gezwungen ist, Speicherseiten kontinuierlich zu verschieben, um sie in den RAM und zurück zu tauschen Halten Sie Anwendungen am Laufen. In diesem Fall zeigen Systemmonitoranwendungen viel Festplatten-E/A-Aktivität an.

Zum Vergleich: Mein Ubuntu 10.04-System mit zwei Benutzern, die mit X11-Sitzungen angemeldet sind, auf denen beide GNOME-Desktop ausführen, verwendet ~ 600 MB Swap und ~ 1 GB RAM (ohne Puffer und fs-Cache) Ich würde sagen, dass Ihre Zahlen für die Swap-Nutzung normal aussehen.

96
Riccardo Murri

Dieses Verhalten kann konfiguriert werden, indem der Wert von:

/proc/sys/vm/swappiness

Der Standardwert ist 60. Wenn Sie ihn auf 0 setzen, wird Swap niemals verwendet, wenn noch RAM übrig ist und 100 den Speicher so schnell wie möglich austauscht).

So ändern Sie den Wert vorübergehend (beim Neustart verloren):

Sudo sysctl vm.swappiness=10

Bearbeiten Sie die Datei, um den Wert dauerhaft zu ändern:

/etc/sysctl.conf

als Wurzel (z.B. Sudo nano /etc/sysctl.conf) und ändern oder fügen Sie (falls nicht vorhanden) die Zeile hinzu:

vm.swappiness

auf den gewünschten Wert. Wenn diese Datei nicht vorhanden ist (z. B. unter Arch Linux), versuchen Sie /etc/sysctl.d/99-sysctl.conf stattdessen.

Es gab einige Debatten darüber, ob das Austauschen mit verfügbarem freiem Speicher gut oder schlecht ist, aber die buntu-Hilfe empfiehlt tatsächlich einen Wert von 10 für Desktop-Systeme . Siehe auch dieses Tutorial zu Digital Ocean für CentOS .

96
Marcel Stimberg

Linux beginnt mit dem Austausch, bevor RAM voll ist). Dies geschieht, um die Leistung und Reaktionsfähigkeit zu verbessern:

  • Die Leistung wird erhöht, weil manchmal RAM besser für den Festplatten-Cache verwendet wird als zum Speichern des Programmspeichers. Daher ist es besser, ein Programm auszutauschen, das eine Weile inaktiv war, und stattdessen häufig verwendete Dateien beizubehalten Zwischenspeicher.

  • Die Reaktionsfähigkeit wird verbessert, indem Seiten ausgetauscht werden, wenn das System inaktiv ist, anstatt wenn der Speicher voll ist und ein Programm ausgeführt wird und mehr RAM, um eine Aufgabe abzuschließen) angefordert wird.

Das Austauschen verlangsamt das System natürlich - aber die Alternative zum Austauschen ist nicht das Austauschen, sondern mehr RAM oder weniger RAM).

Dies ist ein alter Beitrag, aber ich würde mir trotzdem die Freiheit nehmen, meine Gedanken hier zu äußern.

Ausgehend von Down Under würde Linux den Speicher zunächst in Seiten aufteilen (normalerweise 4 KB pro Seite auf dem x86_64-System). Danach wird ein virtueller Speicher erstellt, dessen Zuordnung mit dem physischen Speicher unter Verwendung von MMU (Memory Management Unit) erfolgt.

Den Prozessen wird Speicher aus dem virtuellen Speicherbereich zugewiesen. Beachten Sie daher, dass in/proc/meminfo VMalloc * als Details zum virtuellen Speicher angezeigt wird.

Nehmen wir an, Sie haben einen Prozess, der Speicher anfordert (z. B. 300 MB - ein Webbrowser). Dem Prozess würden 300 MB aus dem virtuellen Speicher zugewiesen, es ist jedoch nicht erforderlich, dass der Speicher zugeordnet ist (dh dem physischen Speicher zugeordnet ist). Es gibt das Konzept von "Copy on Write" für die Speicherverwaltung. Wenn Ihre Prozesse tatsächlich den aus dem virtuellen Speicher zugewiesenen Speicher verwenden (dh, sie schreiben etwas in den Speicher), wird er nur dann dem physischen Speicher zugeordnet. Dies hilft dem Kernel, in einer Umgebung mit mehreren Prozessen effizient zu arbeiten.

Was ist Cache?

Viel Speicher, der von Prozessen verwendet wird, wird gemeinsam genutzt. Nehmen wir an, die glibc-Bibliothek wird von fast allen Prozessen verwendet. Was bringt es, mehrere Kopien von glibc im Speicher zu behalten, wenn jeder Prozess auf denselben Speicherort zugreifen und die Arbeit erledigen kann? Solche häufig verwendeten Ressourcen werden im Cache gespeichert, sodass sie bei Bedarf auf denselben Speicherort verwiesen werden können. Dies hilft bei der Beschleunigung von Prozessen, da das erneute Lesen von glibc (usw.) Von der Festplatte zeitaufwändig wäre.

Das oben Gesagte galt für gemeinsam genutzte Bibliotheken. Ähnliches gilt auch für das Lesen von Dateien. Wenn Sie zum ersten Mal eine große Datei (z. B. 100-200 MB) lesen, dauert dies sehr lange. Wenn Sie jedoch versuchen, dasselbe erneut zu lesen, ist dies schneller. Die Daten wurden im Speicher zwischengespeichert, und das erneute Lesen wurde nicht für alle Blöcke durchgeführt.

Was ist Puffer?

Wenn ein Prozess Datei-E/A ausführt, ist er beim Schreiben von Daten auf die Festplatte auf den Kernel-Puffer angewiesen. Der Prozess fordert den Kernel auf, die Arbeit zu erledigen. Im Namen des Prozesses schreibt der Kernel die Daten in seinen "Puffer" und teilt dem Prozess mit, dass der Schreibvorgang abgeschlossen ist. Auf asynchrone Weise synchronisiert der Kernel diese Daten im Puffer weiterhin mit der Festplatte. Auf diese Weise verlassen sich die Prozesse darauf, dass der Kernel einen korrekten Zeitpunkt für die Synchronisierung der Daten mit der Festplatte auswählt, und die Prozesse könnten weiterarbeiten. Denken Sie daran, dies ist eine allgemeine E/A, die normale Prozesse ausführen. Spezielle Prozesse, die bestätigen müssen, dass E/A tatsächlich auf der Festplatte ausgeführt wird, können jedoch andere Mechanismen verwenden, um E/A auf der Festplatte auszuführen. Einige der Open Source-Dienstprogramme sind libaio. Es gibt auch Möglichkeiten, die explizite Synchronisierung mit FDs aufzurufen, die in Ihrem Prozesskontext geöffnet wurden, sodass Sie den Kernel zwingen, die Daten für den möglicherweise durchgeführten Schreibvorgang mit der Festplatte zu synchronisieren.

Was sind dann Seitenfehler?

Betrachten Sie ein Beispiel, wenn Sie einen Prozess starten (z. B. einen Webbrowser), dessen Binärdatei etwa 300 MB groß ist. Die vollständigen 300 MB der Webbrowser-Binärdatei funktionieren jedoch nicht sofort. Der Prozess bewegt sich in seinem Code von Funktionen zu Funktionen. Wie bereits erwähnt, würde der virtuelle Speicher 300 MB belegen, jedoch ist nicht der gesamte Speicher dem physischen Speicher zugeordnet (RSS-residenter Speicher wäre geringer, siehe obere Ausgabe). Wenn die Codeausführung einen Punkt erreicht, für den der Speicher nicht physisch zugeordnet ist, liegt ein Seitenfehler vor. Der Kernel ordnet diesen Speicher physisch zu und ordnet die Speicherseite Ihrem Prozess zu. Ein solcher Seitenfehler wird als "kleinere Seitenfehler" bezeichnet. In ähnlicher Weise werden beim Ausführen von Datei-E/A größere Seitenfehler ausgelöst.

Wann und warum findet Swap Out statt?

Situation 1 :

Betrachten wir in Übereinstimmung mit den obigen Details ein Szenario, in dem die gute Speichermenge dem Speicher zugeordnet wird. Und jetzt startet ein Prozess, der Speicher benötigt. Wie oben erläutert, muss der Kernel eine Speicherzuordnung durchführen. Es ist jedoch nicht genügend physisches RAM verfügbar), um den Speicher zuzuordnen. Jetzt wird der Kernel zuerst in den Cache schauen und einige alte Speicherseiten haben, die nicht verwendet werden. Diese werden gelöscht Seiten auf eine separate Partition (SWAP genannt), geben einige Seiten frei und ordnen freigegebene Seiten der neuen Anforderung zu. Da das Schreiben von Festplatten viel langsamer als das Solid-State-RAM ist, nimmt dieser Vorgang viel Zeit in Anspruch und verlangsamt sich daher Wurde gesehen.

Situation 2 :

Nehmen wir an, Sie sehen viel freien Speicher im System. Selbst dann sehen Sie, dass viel ausgetauscht wird. Möglicherweise liegt ein Problem mit der Speicherfragmentierung vor. Stellen Sie sich einen Prozess vor, der vom Kernel 50 MB zusammenhängenden Speicher benötigt. (Denken Sie daran, zusammenhängend). Offensichtlich hätte der Kernel Seiten zufällig verschiedenen Prozessen zugewiesen und einige davon freigegeben. Wenn wir jedoch zusammenhängenden Speicher benötigen, muss nach einem Block gesucht werden, der die Prozessanforderungen erfüllt. Wenn es nicht in der Lage ist, einen solchen Speicher abzurufen, muss es einige alte Speicherseiten austauschen und dann zusammenhängende Seiten zuweisen. Selbst in solchen Fällen würde ein SWAP-Out passieren. Ab Kernel Version 2.6 und höher haben sich solche Fragmentierungsprobleme erheblich verringert. Wenn das System jedoch längere Zeit läuft, können solche Probleme dennoch auftreten.

Siehe dieses Beispiel ( vmstat output )

2016-10-29 03:55:32 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
2016-10-29 03:55:32  r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
2016-10-30 03:56:04 19 23 2914752 4692144 3344908 12162628 1660    1  8803 12701 4336 37487 14  7 40 38  0
2016-10-30 03:56:34  3 20 2889296 4977580 3345316 12026752 2109    2  8445 14665 4656 36294 12  7 46 34  0
2016-10-30 03:57:04  1 11 3418868 4939716 3347804 11536356  586 4744  2547  9535 3086 24450  6  3 59 33  0  <<<-----
2016-10-30 03:57:34  3 19 3456252 5449884 3348400 11489728 3291 13371  6407 17957 2997 22556  6  4 66 24  0
2016-10-30 03:58:04  7  6 4194500 5663580 3349552 10857424 2407 12240  3824 14560 2295 18237  4  2 65 29  0
2016-10-30 03:58:34  2 16 4203036 5986864 3348908 10838492 4601 16639  7219 18808 2575 21563  6  4 60 31  0
2016-10-30 03:59:04  3 14 4205652 6059196 3348760 10821448 6624 1597  9431  4357 1750 20471  6  2 60 31  0
2016-10-30 03:59:34  2 24 4206968 6053160 3348876 10777216 5221 2067 10106  7377 1731 19161  3  3 62 32  0
2016-10-30 04:00:04  0 13 4205172 6005084 3348932 10785896 6236 1609 10330  6264 1739 20348  4  2 67 26  0
2016-10-30 04:00:34  4 11 4206420 5996396 3348976 10770220 6554 1253 10382  4896 1964 42981 10  5 58 27  0
2016-10-30 04:01:04  6  4 4177176 5878852 3348988 10825840 8682  765 10126  2716 1731 32949  8  4 69 19  0

@ 2016-10-30 03:57:04, wir sehen, dass es immer noch eine gute Menge an freiem RAM verfügbar) gibt. Selbst dann geschah ein Austausch. Wir haben den Prozessbaum zu diesem Zeitpunkt überprüft und wir haben keinen Prozess gesehen, der so viel Speicher (mehr als freien Speicher) erfordern würde. Der offensichtliche Verdacht war die oben beschriebene Situation 2. Wir haben die obigen Protokolle von buddyinfo und zoneinfo überprüft (Verwenden Sie echo m>/proc/sysrq -trigger, um diese zu überprüfen, Ausgabe geht in Syslogs).

Für ein normales System von uns geht der Vergleich der Zoneninformationen so. Und Grafiken für Cache/Free/Low Mem werden ebenfalls unten erwähnt

(zone info

(swap free low free

Wenn Sie sich die Informationen ansehen, ist klar, dass es in Knoten 0 und Knoten 1 eine normale Speicherfragmentierung gibt (Knoten ist eine NUMA-basierte Maschine, daher mehrere Knoten (siehe numactl, um Informationen für Ihr System zu überprüfen)).

Die Speicherfragmentierung ist auch ein Grund, warum die Swap-Nutzung zunehmen kann, selbst wenn freier Speicher vorhanden ist.

15
Anugraha Sinha

mit mehr verfügbarem Speicher

Wie alle sagten, hilft Ihnen yes swap dabei, nicht verwendeten Speicher zu entfernen, sodass Sie mehr Speicher zur Verfügung haben.

Winterschlaf

Swap kann aber auch für Winterschlaf verwendet werden. Dies kann sehr nützlich sein, wenn Sie einen Laptop haben oder Energie sparen und Ihren Computer in den Ruhezustand versetzen möchten, bevor Sie die Arbeit verlassen. So können Sie am nächsten Morgen schneller starten.

Eine Ruhezustandsfunktion ist einer der Hauptgründe, warum wir heutzutage immer noch empfehlen, mindestens die Größe von RAM für den Swap) zu haben. Auf diese Weise kann das System alle verwendeten RAM in den Swap und geht in den Winterschlaf.

Mängel

Achten Sie darauf, dass nach dem Auslagern auch nach dem Herunterfahren Prozessdaten im Swap gelesen werden können, es sei denn, der Swap wurde (natürlich) verschlüsselt.

Die Verwendung eines verschlüsselten Austauschs im Ruhezustand funktioniert nicht bei allen Distributionen sofort. Sie müssen einen konstanten Verschlüsselungsschlüssel (einige Setups generieren den Swap-Space-Verschlüsselungsschlüssel bei jedem Start zufällig) und ein initrd/initramfs verwenden, um das verschlüsselte Volume zu aktivieren, bevor Sie fortfahren.

5
Huygens

Von buntu Swap F.A.Q. mit dem Marcel verknüpft ist

Als Basisminimum wird dringend empfohlen, dass der Auslagerungsspeicher gleich der Größe des physischen Speichers (RAM) ist. Außerdem wird empfohlen, dass der Auslagerungsspeicher je nach Festplattengröße doppelt so groß ist wie der physische Speicher (RAM)

Ich denke, Sie sollten Ihren Swap-Bereich in Ihrem System vergrößern. Der Swap beschleunigt die Speicherzuweisung RAM), indem bereits ausgelagerte Daten verworfen werden.

3
Jader Dias

Viele moderne Programme basieren auf aufgeblähten Frameworks, die viel Müll mit sich bringen, den Sie zum Ausführen des Programms nicht benötigen. Durch das Austauschen dieser nicht verwendeten Seiten wird RAM für Cache und Programme, die den RAM tatsächlich nutzen können) freigegeben.

Ich spreche hier aus schmerzhaften persönlichen Erfahrungen.

Letztes Jahr habe ich eine meiner Websites auf ein vielversprechendes neues Webserver-Framework umgestellt, das auf Firefox basiert. Es mag seltsam klingen, ein serverseitiges System auf einem clientseitigen Programm wie Firefox aufzubauen, aber es hatte einige enorme Vorteile. Firefox ist sehr leistungsfähig, bietet einige wirklich beeindruckende interne Dienste und verringert die Impedanzfehlanpassung zwischen Server und Client, damit beide ähnliche Plattformen ausführen.

Aber es gibt einen Nachteil: Firefox ist groß. Sehr groß. Dies war eine Art Projekt der Version 1.x, also waren sie nicht dazu gekommen, die GUI-Unterstützung zu entfernen. [*] Meine Website brauchte nichts davon, aber weil die VPS-Technologie, die mein Hosting-Anbieter verwendete, dies nicht tat. Ich erlaube keinen Swap Space, diesen GUI-Code und alle anderen Teile von Firefox, die ich nicht verwendet habe, haben echten RAM gegessen. Am Ende brauchte ich 512 MB RAM Minimum, um die Site auszuführen, ohne dass sie aufgrund von Speicherauslastung abstürzt. Wenn mein VPS über einen Swap-Speicher verfügt, hätte ich wahrscheinlich einen bekommen können von mit einem 256 MB Plan.

[*] Das Entfernen des GUI-Codes aus dem Framework war möglicherweise nicht einmal wünschenswert, da einer der Vorteile dieser Plattform das High-Fidelity-Web-Scraping war, da das serverseitige Framework Webseiten von einer anderen Site herunterladen und Sie genau wie Sie bearbeiten konnten würde auf der Client-Seite. Denken Sie an Mashups. Vieles davon würde kaputt gehen, wenn Sie die Webseite nicht in einen grafischen Kontext "rendern" können.

Übrigens ist dieses Webframework jetzt im Wesentlichen tot, daher macht es keinen Sinn, es zu benennen und zu beschämen. Nehmen Sie sich am besten die umfassendere Lektion zu Herzen: Ja, Swap ist auch dann noch nützlich, wenn Sie über viel freien Arbeitsspeicher verfügen.

3
Warren Young

Ich denke, "Gilles" hat bereits die Tatsache erwähnt, dass Swap zwar über mehr als genug RAM verfügt, aber bei bestimmten "Mängeln" nützlich sein kann und auch nach dem Herunterfahren einige Daten dauerhaft speichert - oder irre ich mich, wenn ich das annehme? ( da RAM wird nach einem Neustart gelöscht) Ich habe 12 GB RAM auf meinem System verfügbar, und ich habe auch schon einmal über diese Frage nachgedacht Als ich den gesamten Swap deaktiviert hatte und mich nur auf meinen Arbeitsspeicher stützte, hatte ich schmerzlich schwierige Erfahrungen mit dem Versuch, Systemfehler oder Abstürze usw. nach dem Herunterfahren des Systems zu beheben. Seitdem habe ich die Swap-Partition wieder aktiviert.

2
ILMostro_7