Ich habe etwas gestartet, das viel Speicherplatz beansprucht, und jetzt bleibt alles viel zurück. Ich schätze, der Speicher aller Anwendungen wurde ausgetauscht, um Speicherplatz für den speicherintensiven Prozess freizugeben. Jetzt kehrt beim Zugriff langsam alles in den Arbeitsspeicher zurück.
Gibt es eine Möglichkeit, alles Mögliche explizit vom Auslagern zurück in den Arbeitsspeicher zu verschieben? Oder vielleicht nicht alles, sondern nur bestimmte Prozessdaten?
swapoff
Sie können das Echo auf eine Zahl zwischen 0 und 100 einstellen
/proc/sys/vm/swappiness
.quelle
sysctl
sondern verwenden Sie stattdessen den Befehl. In diesem Fall ist essysctl vm.swappiness=x
.sysctl
Befehl für die Benutzerinteraktion. Das Endergebnis ist dasselbe, aber normalerweise werden Schnittstellen auf höherer Ebene bevorzugt, damit der Benutzer direkt interagieren kann. Ein bisschen wie das Starten des Motors durch Kurzschließen der Zündkabel (niedrigere Stufe), anstatt nur den Schlüssel zu drehen (höhere Stufe).Linux erledigt einen guten Job in der Speicherverwaltung und Sie sollten nicht im Weg stehen. Die zuvor erwähnte vm.swappiness-Einstellung steht nicht im Weg. Es ist wahrscheinlicher, dass seltsame Probleme auftreten, wenn Sie Dinge auf andere Weise tun.
Was hast du gestartet, das so speicherhungrig war? Kann es gestimmt werden? Wenn es keine eigenen Direktiven für die Speicherbegrenzung gibt, können Sie sich auch ulimit ansehen.
quelle
convert -density 200 file.pdf jpegs/file.jpg
. Aus irgendeinem Grund verbraucht es viel Speicher, aber Sie haben Recht: Es kann eingestellt werden. Wie auch immer, die Situation ist mit jeder Anwendung möglich :)convert
hat das-limit
Argument, den Arbeitsspeicher im Vergleich zur Festplattennutzung zu steuern, und Sie sollten sie nachlesen. Einstellung-limit memory 512MB
oder ähnliches wäre gut. Es wäre wahrscheinlich auch gut, einen expliziten MAGICK_TEMPORARY_PATH anzugeben und diesen nach Abschluss Ihres Befehls zu bereinigen.Wenn Sie den Speicher für alle Ihre Anwendungen zur Verfügung haben, ist es in Ordnung, die Auslagerungszeit auf 0 zu setzen, damit die Dinge nicht ausgelagert werden. Zum Beispiel ist qemu-kvm ein großes Ziel, das der VMM austauschen soll, da er die meiste Zeit im Leerlauf zu sein scheint. Ich habe gesehen, dass bis zu 80% des Speichers eines qemu-kvm-Speichers in den Swap geschrieben werden. Die VMs, die in qemu-kvm ausgeführt werden, reagieren fast nicht mehr, weil ihnen der Swap ausgeht (obwohl der Gast keine Ahnung hat, dass dies geschieht). Die Gast-VM wird denken, dass sie am besten abschneidet, obwohl sie in Wahrheit furchtbar schleppt. Wenn mehrere VMs "aufwachen" und anfangen, Dinge zu tun, kann die durchschnittliche Auslastung sogar auf Hardware der Enterprise-Klasse mit ausreichend schnellem Arbeitsspeicher und Festplatte auf über 30 steigen. Ich denke, dies ist ein Fehler im sofort einsatzbereiten qemu-kvm-Design.
Hoffe das hilft jemandem.
quelle
Ich würde davon abraten, das VM-Subsystem im Kernel zu überdenken. Es ist EXTREM unwahrscheinlich, dass Sie tatsächlich über genügend Informationen verfügen, um bessere Entscheidungen zu treffen, als dies der Fall ist. Und wenn Sie es irgendwie erzwingen, das Falsche zu tun, werden Sie die Dinge am Ende nur noch langsamer machen.
quelle
Wenn Sie in der Lage sind, das System neu zu starten, sollte dies der Fall sein (und möglicherweise viel weniger Zeit in Anspruch nehmen, als wenn Sie eine andere Lösung ausprobieren).
quelle
Um einen Teil meiner Antwort von dieser Frage zu kopieren .
Damit Sie wissen, wie das swappiness tunable funktioniert. Dies funktioniert, indem das VM-Subsystem angewiesen wird, nach auszutauschenden Seiten zu suchen, wenn der Prozentsatz des Speichers, der den Prozessseitentabellen zugeordnet ist, + der Austauschwert> 100 ist. Bei einer Einstellung von 60 beginnt das System, veraltete Seiten aus der Prozessseitentabelle auszulagern wenn mehr als 40% des Arbeitsspeichers Ihres Systems belegt sind. Wenn Sie Ihren Programmen erlauben möchten, auf Kosten des Caches mehr Speicher zu verwenden, sollten Sie den Swap-Wert verringern.
quelle
Läuft der Prozess noch? Öffnen Sie ein Terminal und prüfen Sie, ob Sie die gestarteten Prozesse erkennen können. (ps aux | grep processname macht es möglicherweise etwas einfacher.) Verwenden Sie kill -9 PID, um sie auszuschalten, wenn sie noch ausgeführt werden. Pass auf, was du tötest. Wenn Sie nicht wissen, was der Prozess ist, töten Sie ihn nicht! Stellen Sie auch die Ausgabe von free -m bereit, damit wir sehen können, ob Sie tatsächlich noch viel Swap verwenden.
Wenn die Dinge immer noch langsam laufen, läuft möglicherweise immer noch, was Sie gestartet haben. Ich würde den Swap niemals ausschalten, wenn Sie nicht wirklich wissen, was Sie tun oder wenn Sie am Rande leben möchten. =)
quelle
Ich glaube, dass es keine wirklich gute Möglichkeit gibt, Linux zu zwingen, Daten vom Datenträger in den Arbeitsspeicher zu verschieben. Wenn swapoff / swapon eine funktionierende Lösung ist, es aber schmutzig ist und Ihr System leicht instabil machen kann. In den Fällen, in denen Sie mehr Daten im Swap als im freien Speicher haben, ist es schwer vorstellbar, mit welchen effizienten Richtlinien Linux entscheidet, welche Daten in den Speicher verschoben werden und welche auf der Festplatte bleiben.
Zusammenfassung: Lassen Sie Linux einfach nach und nach seine Leistung auf normale Weise wiederherstellen. Das VM-Subsystem ist so organisiert, dass es bestrebt ist und sich ständig in einen idealen ausgeglichenen Zustand bewegt.
quelle
Puffer-Cache leeren
Wenn Sie sie jemals leeren möchten, können Sie diese Befehlskette verwenden.
Sie können dem Linux-Kernel signalisieren, verschiedene Aspekte von zwischengespeicherten Elementen zu löschen, indem Sie das numerische Argument in den obigen Befehl ändern.
HINWEIS: Bereinigen Sie den Speicher von unnötigen Dingen (Kernel 2.6.16 oder neuer). Stellen Sie immer sicher, dass Sie zuerst die Synchronisierung ausführen, um nützliche Dinge auf die Festplatte zu übertragen !!!
So geben Sie den Pagecache frei:
So befreien Sie Einträge und Inodes:
So geben Sie Pagecache, Einträge und Inodes frei:
Die oben genannten sollen als root ausgeführt werden. Wenn Sie versuchen, sie mit sudo zu erstellen, müssen Sie die Syntax leicht ändern:
quelle