Es passiert mir ziemlich oft, wenn ich im Hintergrund Software kompiliere und plötzlich alles langsamer wird und irgendwann einfriert [wenn ich nichts tue], da mir sowohl der RAM- als auch der Swap-Speicherplatz ausgehen.
Bei dieser Frage wird davon ausgegangen, dass ich genügend Zeit und Ressourcen habe, um Gnome Terminal zu öffnen, meinen Verlauf zu durchsuchen und einen sudo
Befehl auszuführen .
Welcher Befehl erspart mir einen harten Neustart oder einen Neustart überhaupt?
command-line
ram
freeze
swap
Akiva
quelle
quelle
make
, versuchen Sie-j4
zum Beispiel für 4 parallel zu einer Zeit aufbaut.Antworten:
Nach meiner Erfahrung verwenden Firefox und Chrome mehr RAM als meine ersten 7 Computer zusammen. Wahrscheinlich mehr als das, aber ich komme von meinem Standpunkt weg. Als erstes sollten Sie Ihren Browser schließen . Ein Kommando?
Ich habe die gängigsten Browser in einem Befehl zusammengefasst, aber wenn Sie offensichtlich etwas anderes ausführen (oder wissen, dass Sie keinen dieser Befehle verwenden), ändern Sie einfach den Befehl. Das
killall -9 ...
ist das Wichtige. Die Leute haben ZweifelSIGKILL
(Signal Nummer 9), aber die Browser sind extrem belastbar.SIGTERM
Darüber hinaus bedeutet das langsame Beenden über , dass der Browser eine Menge Bereinigungsmüll ausführt - was eine Menge zusätzlichen Arbeitsspeichers erfordert - und das können Sie sich in dieser Situation nicht leisten.Wenn Sie das nicht in ein bereits laufendes Terminal oder einen Alt+ F2-Dialog bringen können, sollten Sie zu einem TTY wechseln. Control+ Alt+ F2Finden Sie auf TTY2 erhalten , die Sie (obwohl es auch sein mag langsam) und sollte auch können Sie verwenden , um etwas wie einzuloggen erlauben sollte
htop
zu debuggen das Problem. Ich glaube nicht, dass mir jemals der Arbeitsspeicher ausgeht, bis ich nicht mehrhtop
aufstehen konnte.Die langfristige Lösung besteht darin, entweder mehr RAM zu kaufen, über einen Remote-Computer zu mieten oder nicht das zu tun, was Sie gerade tun. Ich überlasse Ihnen die komplizierten wirtschaftlichen Argumente, aber im Allgemeinen ist RAM günstig zu kaufen, aber wenn Sie nur einen Burst-Betrag benötigen, ist ein VPS-Server, der pro Minute oder Stunde in Rechnung gestellt wird, eine gute Wahl.
quelle
lazygit
Befehl verknüpft, die ich von Zeit zu Zeit verwende. Vielleicht könnte hier so etwas angewendet werden? Das gesamtekillall ...
Drehbuch könnte auf ein einfachesemptyram
oder ähnliches reduziert werdenemptyram
Drehbuch geschrieben habe, als mich nur einzuschaltenkillall -9 firefox
.Auf einem System mit aktiviertem Magic System Request Key wird durch Drücken von Alt + System Request+ f(wenn nicht auf Ihrer Tastatur markiert, System Requestwird häufig die Print ScreenTaste gedrückt) der Kernel-Killer (oomkiller) aufgerufen, der versucht, den schlimmsten fehlerhaften Prozess auszuwählen Speichernutzung und töte es. Sie können dies tun, wenn Sie möglicherweise weniger Zeit als beschrieben haben und das System gerade dabei ist, das Thrashen zu starten (oder bereits begonnen hat) - in diesem Fall ist es Ihnen wahrscheinlich egal, was genau getötet wird, nur dass Sie damit enden mit einem brauchbaren System. Manchmal kann dies dazu führen, dass X getötet wird, aber heutzutage ist es meistens viel besser, einen schlechten Prozess auszuwählen, als es früher der Fall war.
quelle
kernel.sysrq
um1
oder eine Nummer , einschließlich der richtigen Bit in Ihrem/etc/sysctl.d/10-magic-sysrq.conf
.Im Gegensatz zu anderen Antworten schlage ich vor, dass Sie Swap deaktivieren, während Sie dies tun. Während Swap Ihr System auf vorhersehbare Weise am Laufen hält und häufig verwendet wird, um den Durchsatz von Anwendungen, die auf die Festplatte zugreifen, zu erhöhen (indem nicht verwendete Seiten entfernt werden, um Platz für den Festplatten-Cache zu schaffen), hört es sich in diesem Fall so an, als würde Ihr System verlangsamt auf ein unbrauchbares Niveau, weil zu viel aktiv genutzter Speicher zwangsweise ausgetauscht werden muss.
Ich würde empfehlen, Swap während dieser Aufgabe vollständig zu deaktivieren, damit der Killer für nicht genügend Arbeitsspeicher reagiert, sobald der Arbeitsspeicher voll ist.
Alternativlösungen:
zswap
im Kernel zu aktivieren . Dadurch werden die Seiten komprimiert, bevor sie zum Auslagern gesendet werden. Dies bietet möglicherweise gerade genug Bewegungsspielraum, um den Computer zu beschleunigen. Auf der anderen Seite könnte es durch die zusätzliche Komprimierung / Dekomprimierung zu einem Hindernis werden.tcc
) zu kompilieren, was zu einer geringfügigen Beeinträchtigung der Laufzeitleistung des kompilierten Produkts führt. (Dies ist normalerweise akzeptabel, wenn Sie dies für Entwicklungs- / Debugging-Zwecke tun.)quelle
sudo swapoff -a
Sie retten kann, wenn Sie sich bereits in einem Bind befinden: Es stoppt sofort jede zusätzliche Verwendung des Swap Space, dh der OOM-Killer sollte im nächsten Moment aufgerufen werden und die Maschine in einen funktionsfähigen Zustand versetzen.sudo swapoff -a
Dies ist auch eine hervorragende Vorsichtsmaßnahme, wenn Sie Speicherlecks beheben oder beispielsweise Firefox kompilieren. Normalerweise ist Swap ein wenig nützlich (z. B. für den Ruhezustand oder das Auslagern von wirklich nicht benötigtem Material), aber wenn Sie tatsächlich Speicher verwenden, sind die Einfrierungen schlimmer.Sie können den folgenden Befehl (bei Bedarf wiederholt) verwenden, um den Prozess mit dem größten RAM-Speicher Ihres Systems abzubrechen:
Mit:
ps -eo pid --no-headers --sort=-%mem
: Zeigt die Prozess-IDs aller laufenden Prozesse an, sortiert nach Speichernutzunghead -1
: nur die erste Zeile behalten (Prozess mit dem meisten Speicher)xargs kill -9
: töte den ProzessNach Dmitry's genauem Kommentar editieren:
Dies ist eine schnelle und fehlerhafte Lösung, die ausgeführt werden sollte, wenn keine vertraulichen Aufgaben ausgeführt werden (Aufgaben, die Sie nicht ausführen möchten
kill -9
).quelle
Bevor Sie Ihre ressourcenintensiven Befehle ausführen, können Sie auch den Systemaufruf setrlimit (2) verwenden, wahrscheinlich mit dem
ulimit
Builtin Ihrer Bash-Shell (oder demlimit
Builtin in zsh), insbesondere mit-v
forRLIMIT_AS
. Dann schlägt ein zu großer Verbrauch an virtuellem Adressraum (z. B. mit mmap (2) oder sbrk (2), die von malloc (3) verwendet werden ) fehl (wobei errno (3) istENOMEM
).Dann werden sie (dh die hungrigen Prozesse in Ihrer Shell, nachdem Sie getippt haben
ulimit
) beendet, bevor Ihr System eingefroren wird.Lesen Sie auch Linux Ate My RAM und erwägen Sie, die Speicherüberbelegung zu deaktivieren (indem Sie den Befehl
echo 0 > /proc/sys/vm/overcommit_memory
als root ausführen , siehe proc (5) ...).quelle
In diesem Fall etwas wie "killall -9 make" (oder was auch immer Sie verwenden, um Ihre Kompilierung zu verwalten, wenn nicht make). Dies stoppt den weiteren Kompilierungsvorgang, SIGHUPT alle von ihm aus gestarteten Compiler-Prozesse (was hoffentlich dazu führt, dass sie ebenfalls gestoppt werden) und benötigt als Bonus kein sudo, vorausgesetzt, Sie kompilieren als derselbe Benutzer, den Sie angemeldet haben in als. Und da es die eigentliche Ursache Ihres Problems anstelle Ihres Webbrowsers, einer X-Sitzung oder eines zufälligen Vorgangs beseitigt, beeinträchtigt es nicht, was Sie zu der Zeit auf dem System getan haben.
quelle
Erstelle mehr Swap für dich.
Folgendes wird 8G Swap hinzufügen:
Es wird immer noch langsam sein (Sie tauschen), aber Sie sollten eigentlich nicht ausgehen. Moderne Versionen von Linux können in Dateien wechseln. Die einzige Verwendung für eine Swap-Partition in diesen Tagen ist der Ruhezustand Ihres Laptops.
quelle
fallocate -l 8G /root/moreswap
stattdd
zu vermeiden , jemals zu tun 8 GB I / O benötigen , während das System Dreschen ist. Dies funktioniert jedoch mit keinem anderen Dateisystem. Auf keinen Fall XFS, bei dem swapon ungeschriebene Bereiche als Lücken erkennt. (Ich denke, diese xfs Mailinglistendiskussion hat nicht geklappt ). Siehe auchswapd
, ein Daemon, der im laufenden Betrieb Auslagerungsdateien erstellt / entfernt, um Speicherplatz zu sparen. Auch askubuntu.com/questions/905668/…xul.dll
) hat eine Größe von ca. 50 MB, ist also etwa zehnmal so schwer wie der Linux-Kernel.Eine Möglichkeit, kurzfristig einen Teil des freien RAM zu erhalten, ist die Verwendung von zram , das eine komprimierte RAM-Disk erstellt und dort austauscht . Bei einer halbwegs vernünftigen CPU ist dies viel schneller als normales Auslagern, und die Komprimierungsraten sind bei vielen modernen RAM-Hogs wie Webbrowsern ziemlich hoch.
Vorausgesetzt, Sie haben zram installiert und konfiguriert, müssen Sie nur noch ausführen
quelle
sudo swapoff -a
Deaktiviert den Swap und der Kernel bricht den Prozess mit der höchsten Punktzahl automatisch ab, wenn das System keinen Speicher mehr hat. Ich benutze dies, wenn ich weiß, dass ich etwas RAM-lastiges laufen lasse, das ich lieber töten würde, wenn es außer Kontrolle gerät, als es für immer tauschen und stecken bleiben zu lassen. Verwenden Siesudo swapon -a
, um es anschließend wieder zu aktivieren.Vielleicht möchten Sie später einen Blick auf Ihre Swap-Einstellungen werfen. Klingt so, als ob sich Ihr Swap auf derselben Festplatte befindet wie die Root-Partition. Dies würde Ihr System verlangsamen, wenn Sie auf Swap klicken. Vermeiden Sie dies, wenn Sie können. Außerdem werden moderne Systeme meiner Meinung nach häufig mit zu viel Swap konfiguriert. 32GiB RAM bedeutet normalerweise, dass standardmäßig 32GiB Swap zugewiesen wird, als ob Sie wirklich 32GiB in Ihren Swap-Bereich einfügen möchten.
quelle
Eine weitere Möglichkeit besteht darin, den Cache für Speicherseiten mit diesem Befehl freizugeben:
Aus der kernel.org- Dokumentation (Hervorhebung hinzugefügt):
quelle
/proc/sys/vm/swappiness
. Mit swappiness auf 0 hast du recht. Mit der Standardeinstellung von 60 sind Sie nah dran. Mit ihm auf 200 festgelegt, jedoch wird es die am wenigsten kürzlich verwendete Seiten werden der laufenden Prozesse , die zuerst ... in diesem speziellen Fall runterfallen, dieser Befehl kann nützlich sein. Das Setzen von swappiness auf 0 (oder einen niedrigen Wert, vielleicht 20 oder 30) wäre jedoch ein besserer allgemeiner Ansatz.kswapd
Fehlern (einige Leute haben sogar Cronjobs damit erstellt). Aber du hast recht, ich bezweifle, dass es bei dieser Frage helfen wird.Sie sagten "Kompilieren im Hintergrund". Was machst du im vordergrund Wenn Sie mit Eclipse oder einer anderen ressourcenintensiven IDE entwickeln, überprüfen Sie, ob in der Konsole alles ordnungsgemäß terminiert ist.
In Entwicklungsumgebungen können häufig mehrere Prozesse in der Entwicklung gestartet werden. Diese können auch dann hängen bleiben, wenn Sie nicht mehr an ihnen interessiert sind (im Debugger oder einfach nicht ordnungsgemäß beendet). Wenn der Entwickler nicht aufpasst, können sich im Laufe des Tages Dutzende vergessener Prozesse ansammeln, die mehrere Gigabyte umfassen.
Prüfen Sie, ob alles, was in IDE beendet werden soll, beendet ist.
quelle