Linux ohne Swap fängt immer noch an zu prügeln

672
attila lendvai

Debian 9.4, Linux 4.9

Ich kompiliere manchmal etwas, das kaum in den RAM passt, oder ein Rouge-Prozess beginnt plötzlich, Speicher zu verbrauchen, der über das verfügbare hinausgeht. Wenn der Prozess über den verfügbaren Arbeitsspeicher hinausgeht, beginnt Linux mit dem Thrashing der Festplatte, obwohl Null-Swap aktiviert ist (kein Swap war ein Versuch, dies zu vermeiden). Ich schätze, es beginnt damit, Sachen wie die mmapPed-Teile der Binärdateien, die gerade laufen, zu verwerfen und neu zu laden .

An diesem Punkt reagiert meine X-Sitzung schnell nicht mehr, und ich kann nur Dutzende Minuten warten, bis die gesamte X-Sitzung beendet ist und ich mich wieder anmelden kann.

Ich habe versucht, nach Lösungen zu suchen, aber nichts scheint zu funktionieren. Der OOM-Killer fängt diesen Prozess nicht ein und vm.overcommit_memory=2mit GDM und Gnome kann ich mich nicht einloggen.

Gibt es eine Möglichkeit , Linux mitzuteilen, überhaupt nicht zu tauschen ? Auf diese Weise würde ich zumindest die Chance bekommen, dass der Rouge-Prozess von einem fehlgeschlagenen Prozess beendet wird malloc, und selbst wenn nicht, würde ich zumindest nicht warten müssen, während ich auf eine nicht reagierende Maschine starrte.

Oder irgendwelche anderen Hinweise, wie man dieses Szenario handhabt?

0
Ich denke, du schaust es falsch an. Was Sie beschreiben, ist genau das, was erwartet wird, wenn mehr als der verfügbare Arbeitsspeicher benötigt wird und kein Swap zum Ausgleich vorhanden ist. Ihr Problem ist also, dass Sie kein Swap haben, statt Linux mit swapoff zu tauschen, was nicht der Fall ist und völlig unsinnig ist. vor 6 Jahren 2
Auslagerungsalgorithmen ermöglichen das Freigeben von Codeseiten, die nicht modifiziert sind, wodurch Speicher für andere Anwendungen ermöglicht wird. Dies ist kein Tausch, da nichts geschrieben wird, aber je mehr (unbenutzbare) Datenseiten sich im Speicher befinden, desto mehr Plattenaktivität zum Freigeben und Lesen von Codeseiten in den schwindenden verbleibenden Speicher, was sich offensichtlich auf die Leistung auswirkt. AFH vor 6 Jahren 0
Warum versuchst du übrigens, ohne Swap zu laufen? Es wird fast sicher irgendwann blockieren, wenn keine freien Speicherseiten vorhanden sind. Sie können jederzeit eine Auslagerungsdatei _file_ hinzufügen, wie [dieser Link] (https://help.ubuntu.com/community/SwapFaq#How_do_I_add_a_swap_file.3F) beschreibt. AFH vor 6 Jahren 1
Ich laufe bereits ohne Swap, um zu verhindern, dass mein Rechner überrumpelt und blockiert wird, wenn ich beispielsweise vergessen habe, den Browser zu beenden, während das Build im Hintergrund ausgeführt wird (es läuft 3 Stunden lang und nur das Ende erfordert viel RAM). . attila lendvai vor 6 Jahren 0
Um Thrashing und "Blocking" zu vermeiden, können Sie entweder mehr RAM kaufen oder weniger (oder kleinere) auf einmal ausführen. Jamie Hanrahan vor 6 Jahren 0
Um das Paging von (und zu) Festplatten zu beschleunigen, sollten Sie eine SSD in Betracht ziehen. Nicht nur für Ihren Swap-Bereich, sondern für die gesamten OS + -Anwendungen. Jamie Hanrahan vor 6 Jahren 0
Ich freue mich über Ihren Versuch, zu helfen, aber bitte nehmen Sie mehr von Leuten an, die auf superuser.com herumhängen! Ich habe bereits eine SSD, und ich bin mir dessen bewusst, dass ein Upgrade meiner Maschine durchgeführt wird. duh! Die Lösung, nach der ich suche, ist ein vernünftiges Verhalten von Linux, wenn Fehler auftreten. Ersetzen Sie einfach mein Kompilierungsbeispiel durch einen Programmfehler, der manchmal den gesamten RAM frisst. attila lendvai vor 6 Jahren 0
Ist ein * Rouge-Prozess * das Gegenteil von einem * grünen Faden? * tripleee vor 6 Jahren 0
Attila, du hast nicht erwähnt, dass du eine SSD hast. Und Antworten (und Kommentare) hier sind nicht nur für den ursprünglichen Fragesteller. Das Prinzip, das ich zur Vermeidung von Thrashing aufstellte, gilt für alle. Übrigens ist das Ausführen ohne Swap im Allgemeinen eine schlechte Idee - wenn das Betriebssystem über wenig RAM verfügt, werden damit immer noch Seiten aus dem RAM entfernt. Sie zwingen es lediglich, nur Codepages und andere schreibgeschützte mmap-Dateien zu entfernen, wenn sich unter den geänderten Datenseiten möglicherweise bessere Kandidaten für die Vertreibung befinden. Mit anderen Worten, indem Sie die Auswahl des Betriebssystems einschränken, zwingen Sie es, ärmere zu machen. Jamie Hanrahan vor 6 Jahren 0

1 Antwort auf die Frage

2
Marco Pantaleoni

Wenn Sie Quellen kompilieren, für die fast der gesamte verfügbare RAM erforderlich ist (wenn nicht mehr), ist das Hinzufügen von echtem RAM wahrscheinlich die einzige performante Lösung. Trotzdem können Sie versuchen, eine sehr große Menge Swap hinzuzufügen (zB 2x oder 3x des Arbeitsspeichers) und /proc/sys/vm/swappinessauf einen niedrigen Wert wie 1 zu setzen (beachten Sie, dass bei Kernel 3.5+ der Wert 0 den Swap völlig deaktiviert), so dass der Swap funktioniert wird nur verwendet, wenn es tatsächlich notwendig ist. Dies sollte das Thrashing minimieren.

Ich stimme dieser Antwort zu. Es geht hier darum, das System die verschmutzten Seiten inaktiver Prozesse austauschen zu lassen, um den Arbeitsspeicher für den Kompilierungsprozess freizugeben. Auf diese Weise hat die Zusammenstellung eine bessere Chance, ihre Arbeit in angemessener Zeit abzuschließen. Wenn dies immer noch nicht hilft, benötigen Sie wirklich mehr physischen Arbeitsspeicher. Johan Myréen vor 6 Jahren 0
Leider gibt es nichts Besseres als das, aber danke für den Hinweis! Ich laufe damit und auf diese Weise bekomme ich ein größeres Zeitfenster, um zumindest einzugreifen, wenn ich in der Nähe bin, wenn es passiert. attila lendvai vor 6 Jahren 0
Gut! Es freut mich zu hören, dass dies eine Hilfe war! Marco Pantaleoni vor 6 Jahren 0
Sie brauchen jedoch wirklich einen großen Swap, um dies zu verbessern, denn ein kleinerer Swap wird bei der ersten unkontrollierten Zuweisung gefüllt, und beim zweiten Mal, wenn der Swap jetzt fast voll ist, verhält er sich ähnlich wie das No-Swap-Szenario. attila lendvai vor 6 Jahren 0