Seit Jahren habe ich das gleiche Problem mit meinen kleinen Ubuntu-Konfigurationen: Der belegte Swap-Platz nimmt mit der Zeit zu. Ich habe den Eindruck, dass dies hauptsächlich darauf zurückzuführen ist, dass der zugewiesene Arbeitsspeicher nie in den Arbeitsspeicher zurückkehrt, obwohl genügend Speicherplatz vorhanden ist, außer im Fall einer Benutzeraktion wie dem Deaktivieren des Auslagerungsmodus.
Ich habe einen kurzen cron
Befehl gegeben, um dies zu automatisieren, und ich habe gute Ergebnisse:
#! /bin/sh
echo "* */1 * * * root swapoff -a && swapon -a" >> /etc/crontab
Aber weil es eher ein Trick als eine echte Lösung für dieses Problem ist, frage ich mich, warum es eine schlechte Idee sein könnte oder wie ich dieses Skript verbessern könnte, um es ein bisschen schlauer zu machen.
Antworten:
Verwenden Sie es so: ja, schlecht. Sie müssen wirklich prüfen, ob genügend Speicher verfügbar ist, bevor Sie den Swap ausschalten. Eine bessere Version finden Sie unter https://askubuntu.com/a/90399/15811 .
Auch: Bist du dir da sicher? Das Zuweisen von Swap bedeutet nicht, dass Swap verwendet wird. Der Befehl
vmstat
, Spaltensi
(Swap In) undso
(Swap Out). Wenn diese 0 bleiben, haben Sie ein anderes Problem. Meiner Erfahrung nach wird Swap kaum verwendet, und Sie werden es möglicherweise nicht verwenden, weil Sie denken, es würde es nicht leeren, aber es gibt nichts zu leeren.quelle
vmstat
.Ich würde sagen, es ist eine schlechte Idee. Wenn Sie denken, Sie haben freien Speicher und ein aktiver Prozess wird nicht vom Auslagerungsspeicher in den Arbeitsspeicher verschoben, haben Sie entweder nicht so viel freien Speicher wie Sie denken oder der Prozess ist nicht so aktiv, wie Sie denken ist.
Wenn ein aktiver Prozess weiterhin ausgetauscht wird, sollten Sie das Problem beheben, das den Speicher unter Druck setzt. Wenn es kein aktiver Prozess ist, was ist das große Problem?
quelle
Es ist eine schlechte Idee.
Der Kernel beginnt mit dem Kopieren (nicht dem Verschieben) von Daten zum Auslagern, lange bevor der physische Speicher fast voll ist. Wenn ein Prozess jemals viel Speicher benötigt, kann jede Seite, die bereits eine gültige Auslagerungskopie hat, sofort wiederverwendet werden, ohne dass ein weiterer Schreibvorgang erforderlich ist auf die Festplatte.
Im Allgemeinen geschieht dies meistens für Seiten, auf die lange Zeit nicht zugegriffen wurde. Dies ist ein guter Indikator dafür, dass ein baldiger Zugriff unwahrscheinlich ist.
Wenn Sie die Kopien explizit verwerfen, hat dies keinen Vorteil, da die Daten immer noch im RAM vorhanden sind, Sie jedoch möglicherweise Geschwindigkeit kosten, wenn ein Prozess viel Speicher zuweisen möchte und ein Auslagern erforderlich wird.
Der Kernel verwendet auch immer Swap-Speicher, sobald der physische Speicher zu über 50% voll ist. Diese Zahlen sind also ungleich Null, auch wenn genügend Speicher installiert ist.
quelle
/proc/sys/vm/swappiness
der Standardwert von70
beibehalten wird. Dies ist gut für Server und führt ziemlich aggressiv schmutzige Seiten aus Prozessen aus, die sie eine Weile nicht mehr berührt haben, um Platz für mehr Pagecache zu schaffen. Dies ist für Desktops oftmals schlecht, da Alt-Tab langsam werden kann.swappiness=70
) eingestellt, aber die Latenz ist für die Benutzererfahrung auf einem Desktop wichtiger. Es ist ein Kompromiss. Wenn Sie routinemäßig Dinge kompilieren, die etwas zu groß sind, um im PageCache zu bleiben, lassen Sie sicherswappiness
ein wenig höher, wie 20 oder 30 anstelle von 5 oder 10. Siehe auch akitaonrails.com/2017/01/17/optimizing-linux-for -Slow-Computer . Wennvm.vfs_cache_pressure
weniger als 100 angezeigt werden, werden auch Inode- / Verzeichnis-Metadaten über Datenseiten zwischengespeichert, was auch für die Reaktionsfähigkeit der Benutzeroberfläche von Vorteil ist.Das ist eine schlechte Idee. Wenn dies nützlich wäre, würde der Linux-Kernel es auf diese Weise implementieren. Ich glaube nicht, dass es einen Grund gibt, mehr als ein paar Optimierungsparameter zu ändern, da solch ein einfaches Shell-Skript höchstwahrscheinlich nicht schlauer ist als die Algorithmen der Kernel-Entwickler.
Sie haben grundsätzlich zwei Fälle:
Es gibt also zwei Hauptpunkte:
Obwohl es bei zu vielen Programmen keine Probleme mit zu wenig Arbeitsspeicher gibt, können einige Programme Arbeitsspeicher basierend auf dem derzeit freien Arbeitsspeicher zuweisen (möglicherweise verwendet Ihr Browser mehr Memcache und Sie können schneller browsen) und der Kernel kann freien Arbeitsspeicher für das Zwischenspeichern und Speichern verwenden ähnliche Optimierungen. Wenn Sie erzwingen, dass Ihr Swap leer ist, löscht der Kernel den Lesecache und das Starten einer neuen Firefox-Instanz dauert länger als wenn sich Firefox noch im Festplattencache befindet.
Wenn Sie das Verhalten des Kernels optimieren möchten, lesen Sie den swappiness-Parameter .
Zwei zusätzliche Ressourcen werden von @ peter-cordes bereitgestellt:
Wenn Sie wirklich einen leeren Swap haben möchten, können Sie den Swap dauerhaft deaktivieren. Ich verstehe nicht, warum es sich auszahlt, wenn es eine Stunde lang eingeschaltet ist und dann geleert wird.
quelle
Sie können die gleichen Ergebnisse erzielen, indem Sie den Kernel anweisen, die Caches freizugeben:
Auf diese Weise vermeiden Sie den kurzen Moment eines möglichen Speichermangels und lassen den Kernel entscheiden, was erforderlich ist und was verworfen werden kann.
quelle
Im Gegensatz zur gängigen Idee ist SWAP an sich nicht schlecht .
Was Ihr System tatsächlich verlangsamt, ist die Kernelaktivität, die Daten vom RAM zum SWAP und zurück in den RAM verschiebt
swappiness
.Das System tut dies automatisch, wenn es mit konfiguriert wird
swappiness
.Dadurch wird der Speicher von inaktiven Prozessen auf der Festplatten-Swap-Partition gesichert.
Ich habe selbst jahrelang mit einer Maschine gearbeitet, die nicht so viel RAM-Speicher hatte, und ich hatte immer etwas SWAP-Speicher verwendet. Mein Computer hat immer noch einwandfrei funktioniert, bis Sie anfangen, den Speicher wieder in den Arbeitsspeicher zu verschieben, indem Sie versuchen, eine geöffnete Anwendung zu schließen. Dann begann die Arbeitsbelastung zuzunehmen.
Eher würde ich vorschlagen, dass Sie genau untersuchen, welche Anwendung Ihren Speicher in der Befehlszeile mit der
htop
Anwendung verwendet, und entscheiden, eine Anwendung zu schließen. Dasgnome-system-monitor
kann Ihnen auch in seinem Process-Tab einen guten Einblick geben.Wenn Sie große Anwendungen haben, die viel RAM verbrauchen. Führen Sie sie nicht alle auf einmal aus.
quelle