Die Verwendung von Auslagerungsspeicher anstelle von RAM kann einen PC drastisch verlangsamen .
Warum verwendet mein Linux-System (Arch) den Swap, wenn ich mehr als genug RAM zur Verfügung habe?
Kasse meine conky Ausgabe unten:
Könnte dies auch die Ursache für Geschwindigkeits- und Systemreaktionsprobleme 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
performance
swap
Stefan
quelle
quelle
Antworten:
Es ist normal für Linux - Systeme zu verwenden einige Swap auch wenn es RAM ist noch frei. Der Linux-Kernel verschiebt sich, um Speicherseiten auszutauschen, die sehr selten verwendet werden (z. B. die
getty
Instanzen, in denen Sie nur X11 und einen anderen inaktiven Dämon verwenden).Die Verwendung von Swap-Speicher wird nur dann zu einem Problem , wenn nicht genügend RAM verfügbar ist und der Kernel ständig Speicherseiten verschieben muss, um sie auszutauschen und wieder in den RAM-Speicher zu verschieben, damit die Anwendungen ausgeführt werden. In diesem Fall zeigen Systemüberwachungsanwendungen eine große Anzahl von Festplatten-E / A-Aktivitäten.
Zum Vergleich: Mein Ubuntu 10.04-System, auf dem zwei Benutzer mit X11-Sitzungen angemeldet sind und auf denen GNOME-Desktop ausgeführt wird, verwendet ~ 600 MB Swap und ~ 1 GB RAM (ohne Puffer und fs-Cache) Nutzung sieht normal aus.
quelle
Dieses Verhalten kann durch Festlegen des folgenden Werts konfiguriert werden:
Der Standardwert ist 60. Wenn Sie den Wert auf 0 setzen, wird Swap nie verwendet, wenn noch RAM vorhanden ist und 100 den Speicher so schnell wie möglich auslagert.
So ändern Sie den Wert vorübergehend (geht beim Neustart verloren):
Um den Wert dauerhaft zu ändern, bearbeiten Sie die Datei:
als root (zB
sudo nano /etc/sysctl.conf
) und ändere oder füge (falls nicht da) die Zeile hinzu:auf den gewünschten Wert. Wenn diese Datei nicht existiert (zB in Arch Linux), versuchen Sie es
/etc/sysctl.d/99-sysctl.conf
stattdessen.Es gab einige Debatten darüber, ob das Auslagern mit freiem Speicher gut oder schlecht ist, aber die Ubuntu-Hilfe empfiehlt in der Tat einen Wert von 10 für Desktop-Systeme . Siehe auch dieses Tutorial zu Digital Ocean für CentOS .
quelle
swappiness
Wert hat keine Auswirkung auf mein System. Auch wenn Sie den Wert auf 0 setzen, werden wichtige und häufig verwendete Seiten (z. B. der Index meiner IDE) weiter verschoben, um sie auszutauschen, wenn noch 2 GB freier Arbeitsspeicher vorhanden sind.Linux beginnt zu tauschen, bevor der Arbeitsspeicher voll ist. Dies geschieht, um die Leistung und Reaktionsfähigkeit zu verbessern:
Die Leistung wird gesteigert, da RAM manchmal besser für den Festplatten-Cache als zum Speichern des Programmspeichers verwendet wird. Aus diesem Grund ist es besser, ein Programm auszutauschen, das eine Weile inaktiv war, und stattdessen häufig verwendete Dateien im Cache zu behalten.
Die Reaktionsfähigkeit wird verbessert, indem Seiten ausgetauscht werden, wenn sich das System im Leerlauf befindet und nicht, wenn der Speicher voll ist und ein Programm ausgeführt wird und mehr RAM zum Ausführen einer Aufgabe angefordert wird.
Das Auslagern verlangsamt natürlich das System - aber die Alternative zum Auslagern ist nicht das Auslagern, es hat mehr RAM oder verwendet weniger RAM.
quelle
Dies ist ein alter Beitrag, aber ich würde mir immer noch die Freiheit nehmen, hier meine Gedanken zu äußern.
Ausgehend von Down Under würde Linux zuerst den Speicher in Seiten aufteilen (normalerweise 4 KB pro Seite auf einem x86_64-System). Anschließend wird ein virtueller Speicher erstellt, dessen Zuordnung mit MMU (Memory Management Unit) zum physischen Speicher erfolgt.
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 (sagen wir 300 MB - ein Webbrowser). Dem Prozess würden 300 MB aus dem virtuellen Speicher zugewiesen, es ist jedoch nicht erforderlich, dass er speicherabgebildet ist (dh dem physischen Speicher zugeordnet ist). Für die Speicherverwaltung gibt es das Konzept "Copy on Write" (Kopieren beim Schreiben). Wenn Ihre Prozesse tatsächlich den vom virtuellen Speicher zugewiesenen Speicher verwenden (dh etwas in den Speicher schreiben), wird dieser nur dem physischen Speicher zugeordnet. Auf diese Weise kann der Kernel in einer Umgebung mit mehreren Prozessen effizient arbeiten.
Was sind Cache?
Ein Großteil des von Prozessen verwendeten Speichers 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 bei Bedarf von Prozessen auf denselben Speicherort verwiesen werden kann. Dies hilft bei der Beschleunigung von Prozessen, da das erneute Lesen von glibc (etc.) Von der Festplatte zeitaufwändig wäre.
Das obige gilt für gemeinsam genutzte Bibliotheken, ähnlich wie für das Lesen von Dateien. Wenn Sie zum ersten Mal eine große Datei (z. B. 100-200 MB) lesen, würde dies viel Zeit in Anspruch nehmen. Wenn Sie jedoch versuchen, dasselbe erneut zu lesen, ist dies schneller. Die Daten wurden im Speicher zwischengespeichert und nicht für alle Blöcke erneut gelesen.
Was ist Puffer?
Wenn ein Prozess Datei-E / A ausführt, ist er in Bezug auf den Puffer auf den Puffer des Kernels angewiesen, um Daten auf die Festplatte zu schreiben. Der Prozess fordert den Kernel auf, die Aufgabe zu erledigen. Im Auftrag 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 den richtigen Zeitpunkt für die Synchronisierung der Daten auf die Festplatte auswählt, und die Prozesse könnten weiterarbeiten. Denken Sie daran, dies ist die allgemeine E / A, die normale Prozesse ausführen. Spezielle Prozesse, die bestätigen müssen, dass die E / A tatsächlich auf dem Datenträger ausgeführt wird, können jedoch andere Mechanismen für die E / A-Ausführung auf dem Datenträger verwenden. Einige der OpenSource-Dienstprogramme sind libaio. Es gibt auch Möglichkeiten, die explizite Synchronisierung mit FDs aufzurufen, die in Ihrem Prozesskontext geöffnet sind.
Was sind dann Seitenfehler?
Betrachten Sie ein Beispiel, wenn Sie einen Prozess starten (beispielsweise einen Webbrowser), dessen Binärdatei ungefähr 300 MB groß ist. Die gesamten 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, werden 300 MB virtueller Speicher verbraucht, jedoch wird 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 "Minor Page Faults" genannt. In ähnlicher Weise werden beim Ausführen von Datei-E / A größere Seitenfehler verursacht.
Wann und warum findet ein Swap Out statt?
Situation 1:
Betrachten wir im Einklang mit den obigen Details ein Szenario, in dem die gute Speichermenge in eine Speicherzuordnung umgewandelt wird. Und jetzt startet ein Prozess, der Speicher benötigt. Wie oben besprochen, wird der Kernel einige Speicherzuordnungen vorgenommen haben. Es ist jedoch nicht genügend physischer RAM verfügbar, um den Speicher zuzuordnen. Nun wird der Kernel zuerst in den Cache schauen, er wird einige alte Speicherseiten haben, die nicht benutzt werden. Diese Seiten werden auf eine separate Partition (SWAP) übertragen, einige Seiten werden freigegeben, und die freigegebenen Seiten werden der neuen Anforderung zugeordnet. Da der Schreibvorgang auf der Festplatte viel langsamer ist als im Solid-State-RAM, nimmt dieser Vorgang viel Zeit in Anspruch, weshalb eine Verlangsamung zu beobachten ist.
Situation 2:
Nehmen wir an, Sie sehen viel freien Speicher im System. Sogar dann sieht man, dass eine Menge Swap-Outs stattfinden. Möglicherweise liegt ein Problem mit der Speicherfragmentierung vor. Stellen Sie sich einen Prozess vor, der vom Kernel 50 MB zusammenhängenden Speicher erfordert. (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 Anforderungen der Prozesse erfüllt. Wenn es nicht in der Lage ist, einen solchen Speicher abzurufen, muss es einige alte Speicherseiten austauschen und dann zusammenhängende zuweisen. Auch in solchen Fällen würde ein SWAP-Out stattfinden. Ab Kernel 2.6 haben sich solche Fragmentierungsprobleme erheblich verringert. Wenn das System jedoch über einen längeren Zeitraum läuft, können solche Probleme weiterhin auftreten.
Siehe dieses Beispiel ( vmstat-Ausgabe )
@ 2016-10-30 03:57:04, wir sehen, dass immer noch genügend freier Arbeitsspeicher verfügbar ist. Allerdings geschah auch dann ein Tausch. Wir haben den Prozessbaum zu diesem Zeitpunkt überprüft und keinen Prozess gefunden, der so viel Speicher benötigt (mehr als freien Speicher). Der offensichtliche Verdacht war die oben beschriebene Situation 2. Wir haben die obigen Protokolle buddyinfo und zoneinfo überprüft (verwenden Sie den echo m> / proc / sysrq-Trigger, um diese zu überprüfen, die Ausgabe erfolgt in syslogs).
Für ein normales System von uns ist dies der Vergleich von Zoneninformationen. Und Grafiken für Cache / Free / Low Mem werden ebenfalls unten erwähnt
Wenn Sie sich die Informationen ansehen, ist klar, dass es eine Speicherfragmentierung in Knoten 0 und Knoten 1 gibt (Knoten ist eine NUMA-basierte Maschine, daher mehrere Knoten (siehe Nummer, um die Informationen für Ihr System zu überprüfen)).
Speicherfragmentierung ist auch ein Grund, warum die Auslagerungsnutzung zunehmen kann, selbst wenn freier Speicher vorhanden ist.
quelle
Mehr verfügbaren Speicher haben
Wie bereits erwähnt, hilft Ihnen yes swap dabei, nicht verwendeten Arbeitsspeicher zu entfernen, sodass Sie möglicherweise mehr Arbeitsspeicher zur Verfügung haben.
Winterschlaf halten
Swap kann aber auch für den Ruhezustand 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 beginnen.
Eine Ruhezustandsfunktion ist einer der Hauptgründe, weshalb wir heutzutage immer noch davon ausgehen, mindestens die Größe des Arbeitsspeichers für den Swap zu haben. Auf diese Weise kann das System den gesamten verwendeten Arbeitsspeicher in den Swap stellen und in den Ruhezustand wechseln.
Mängel
Stellen Sie sicher, dass einmal getauschte Prozessdaten auch nach dem Herunterfahren im Swap gelesen werden können, es sei denn, der Swap wurde (natürlich) verschlüsselt.
Die Verwendung von verschlüsseltem Swap mit 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 nach dem Zufallsprinzip) und ein initrd / initramfs verwenden, um das verschlüsselte Volume zu aktivieren, bevor Sie fortfahren.
quelle
Viele moderne Programme basieren auf aufgeblähten Frameworks, die eine Menge Müll mit sich bringen, den Sie eigentlich nicht benötigen, um das Programm auszuführen. Durch das Auslagern dieser nicht verwendeten Seiten wird RAM für Cache und Programme freigegeben, die den RAM tatsächlich nutzen können.
Ich spreche hier aus schmerzhafter persönlicher Erfahrung.
Letztes Jahr habe ich eine meiner Websites auf ein vielversprechendes neues Webserver-Framework umgestellt, das auf Firefox aufbaut. Es mag seltsam klingen, ein serverseitiges System auf einem clientorientierten Programm wie Firefox aufzubauen, aber es hatte einige enorme Vorteile. Firefox ist sehr leistungsfähig, bietet einige wirklich beeindruckende interne Dienste und verringert die Impedanzinkongruenz zwischen Server und Client, damit beide ähnliche Plattformen ausführen.
Aber es gibt einen Nachteil: Firefox ist groß. Sehr groß. Dies war ein Projekt der Version 1.x, also hatten sie sich nicht mit Dingen wie dem Entfernen der GUI-Unterstützung beschäftigt. Swap Space, GUI-Code und alle anderen Teile von Firefox, die ich nicht benutzt habe, haben echtes RAM verbraucht. Am Ende benötigte ich mindestens 512 MB RAM , um die Site auszuführen, ohne dass sie aufgrund von Speichermangel abstürzt. Wenn mein VPS etwas Swap-Platz gehabt hätte, wäre ich wahrscheinlich mit einem 256-MB-Plan durchgekommen.
[*] 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 diese manipulieren konnten genauso wie auf der Client-Seite. Denken Sie an Mashups. Vieles davon würde scheitern, wenn Sie die Webseite nicht in einen grafischen Kontext "rendern" könnten.
Übrigens, dieses Webframework ist im Grunde genommen tot, es hat also keinen Sinn, es zu beschämen. Am besten nehmen Sie sich die umfassendere Lektion zu Herzen: Ja, Swap ist immer noch nützlich, auch wenn Sie genügend freien Arbeitsspeicher haben.
quelle
Von Ubuntu Swap FAQ , mit dem Marcel verlinkt hat
Ich denke, Sie sollten Ihren Swap-Platz in Ihrem System erhöhen. Der Auslagerungsvorgang beschleunigt die RAM-Speicherzuweisung, indem bereits ausgelagerte Daten verworfen werden können.
quelle
Ich denke, "Gilles" erwähnte bereits die Tatsache, dass Swap bei bestimmten "Mängeln" nützlich sein kann und auch nach dem Herunterfahren einige Daten dauerhaft gespeichert werden - oder irre ich mich, wenn ich das annehme? ( da RAM nach einem Neustart entleert wird) Ich habe 12 GB RAM auf meinem System, und ich habe auch schon über diese Frage nachgedacht. Zu einem Zeitpunkt, als ich alle Auslagerungen deaktiviert hatte und mich nur auf meinen Arbeitsspeicher stützte, hatte ich schmerzlich schwierige Erfahrungen mit dem Versuch, einen Systemfehler oder einen Absturz usw. nach dem Herunterfahren des Systems zu beheben. Seitdem habe ich die Swap-Partition wieder aktiviert.
quelle