#1 05.02.2019 19:40:40

Sneezle
Mitglied

[gelöst] RAM wird aufgebraucht und System friert ein

Hallo,

je länger mein System läuft, umso mehr RAM wird üblicherweise in Beschlag genommen. So weit, so normal - vor allem vermutlich, wenn man den Firefox mit mehreren Tabs offen hat, oder andere große Programme mit mehreren Dateien in Bearbeitung (GIMP, LibreOffice, Thunderbird, ...).

Aber irgendwann merke ich dann plötzlich, dass das System "lahmt". Dann habe ich nur noch sehr wenig Zeit, möglichst alle Programme zu schließen, um den Speicher wieder frei zu geben. Anderenfalls verlängert sich die Reaktionszeit des Systems schnell ins nahezu Unendliche. Es reagiert dann auch nicht mehr auf Tastatureingaben, der Mauspointer bleibt stehen, die Uhrzeit friert ein. Ich hab den Rechner schon mal die Nacht über laufen lassen müssen und konnte dann zum Glück am nächsten Morgen meine Daten speichern, aber auf Dauer finde ich so ein Verfahren müßig und stressig.

Ich habe schon Swap-Speicher angelegt, aber der zögert das Problem nur raus. Ich verliere sogar wertvolle Zeit, wenn das System schon lahmt und ich "swapoff -a" anweise, dann aber nicht mehr genug RAM vorhanden ist, um den Swap zu leeren.

Mein System hat 4 GB RAM und 5 GB Swap.

TL;DR

Meine Frage ist, wie kann ich frühzeitig erkennen, dass mein System in RAM-Not gerät und dem entgegenwirken? Außer ständig htop offen zu haben und selber zu kontrollieren. Gibt es ein Programm zur Überwachung und Meldung niedriger Speichervorkommen?

Kann man vielleicht sogar RAM für einen solchen Notfall im Voraus reservieren? Wie die 5% oder 10% Festplattenspeicher, die für root frei gehalten werden?

Vielen lieben Dank!

Beitrag geändert von Sneezle (06.02.2019 09:53:42)

Offline

#2 05.02.2019 20:15:11

hollex
Mitglied

Re: [gelöst] RAM wird aufgebraucht und System friert ein

Als erstes könntest Du diese Datei modifizieren, sodass der Kernel nicht sofort zum Auslagern neigt:

cat /proc/sys/vm/swappiness

https://wiki.archlinux.org/index.php/Swap#Swappiness

Offline

#3 05.02.2019 20:18:59

Sneezle
Mitglied

Re: [gelöst] RAM wird aufgebraucht und System friert ein

Danke für den Vorschlag, hollex.
Meine swappiness steht auf 1.
Letztendlich ist die Zahl sicher nicht so bedeutsam, da das System früher oder später sowohl RAM wie auch Swap füllt und die Probleme anfangen, wenn beides voll ist.

Offline

#4 05.02.2019 20:22:25

hollex
Mitglied

Re: [gelöst] RAM wird aufgebraucht und System friert ein

Erstelle Dir doch eine conky, wo Du jederzeit die Speicherauslastung im Auge hast.

Offline

#5 05.02.2019 20:33:03

chepaz
Mitglied

Re: [gelöst] RAM wird aufgebraucht und System friert ein

Sneezle schrieb:

Meine swappiness steht auf 1.

Dann kannst du deinen Swap aber auch gleich ganz aushängen wink

So wie du das beschreibst würde ich das einfach mal protokollieren und herausfinden WAS deinen Speicher belegt. Das RAM "einfach vollläuft" ist sehr unüblich. Klingt eher nach einem amoklaufenden Prozess. Atop z.B. kann sowas evtl. loggen, dann kann man das Problem zumindest eingrenzen. Hier ist das weiter unten ganz gut beschrieben: https://haydenjames.io/use-atop-linux-s … -analysis/

Offline

#6 05.02.2019 20:37:51

Sneezle
Mitglied

Re: [gelöst] RAM wird aufgebraucht und System friert ein

Ich würde sehr ungerne selbst die Aufgabe übernehmen, conky, top oder htop ständig laufen zu lassen und im Auge zu behalten. Einmal nicht aufgepasst, schon ist es trotzdem wieder passiert. Ich arbeite mit i3 auf bis zu 9 verschiedenen Arbeitsflächen und am liebsten im Vollbild. Wenn ich ständig auf die Speicherauslastung achten muss, zehrt das auf Dauer an meiner Konzentration und Ruhe. Weitaus vorteilhafter fände ich es, wenn diese Überwachung automatisch passieren könnte oder dass es eine Reserve an Speicher gibt, die im Notfall freigegeben wird, um Aufräumarbeiten durchführen zu können.

Offline

#7 05.02.2019 20:41:14

Sneezle
Mitglied

Re: [gelöst] RAM wird aufgebraucht und System friert ein

chepaz - der Swap wird definitiv benutzt, wenn er gebraucht wird. Wenn ich merke, dass das System langsamer wird und versuche, den Swap kurz zu deaktivieren, damit er anschließend wieder frisch gestartet werden kann, dann ist das nicht möglich, weil nicht genügen Arbeitsspeicher zur Verfügung steht, um den Swap-Inhalt aufzunehmen.

Aber vielen Dank für deinen Vorschlag, die Speichernutzung mit atop zu protokollieren! Das werde ich in Angriff nehmen.

Offline

#8 05.02.2019 22:48:20

niemand
Mitglied

Re: [gelöst] RAM wird aufgebraucht und System friert ein

Recht geschickt ist’s auch, SysRq+f freizugeben (sofern noch nicht geschehen). Wenn’s dann wirklich mal komplett volläuft und gar nicht mehr reagiert, kann man mit der Tastenkombi den OOM-Killer aufrufen, der dann ’nen Prozess mit hohem Speicherverbrauch killt. Dann muss man zumindest nicht neu booten ….

Online

#9 05.02.2019 23:53:43

hollex
Mitglied

Re: [gelöst] RAM wird aufgebraucht und System friert ein

Offline

#10 06.02.2019 00:24:54

GerBra
Mitglied

Re: [gelöst] RAM wird aufgebraucht und System friert ein

Du könntest auch als RADIKALE Maßnahme die max. mögliche Speichernutzung deines Users einschränken. Das ist durch die cgroups sehr einfach möglich.
Z.B. von den 4GB nur 3,2 oder 3,5 zur Verfügung stellen.
Auch der Anteil am Swap für deinen User kannst du reglemetieren.

Was passiert wenn diese Limits überschritten werden? Das ist dann die Stunde des OOM-Killers <g>
- Ein neuer Prozeß, der das Limit überschreiten läßt, wird gekillt
- Wenn die laufenden Prozesse dieser Gruppe das Limit überschreiten, dann werden laufende Prozesse gekillt. Das kann der verursachende sein, aber ggf. auch die neuesten oder willkührlich (da bin ich mir nicht sicher).

Du kannst das ja mit einem neuen Testuser mal ausprobieren (habe ich gerade auch, da ich mich mit den cgroups auch noch nicht intensiv beschäftigt habe, gerade bei der Memory-Geschichte).
Ein nützliches Tool dafür ist:
systemd-cgtop -m
Das zeigt aktuell - sortiert nach Speichernutzung - die Gruppen auf. Interessant sind dann in dem Fall die user.* Gruppen. Angenommen, deine UID wäre 1001, dann zeigt die Zeile /user.slice/user-1001.slice die momentan Menge an Speicher, die ab der Anmeldung deine weiteren gesamten Prozesse verbraten. Nicht durch die anderen user-1001 Zeilen irritieren lassen: Das sind nur "Unterverzeichnisse", tragen also in der Summe den Wert für /user.slice/user-1001.slice zusammen. Ebenso ist die Titelzeile "irritierend".
Ein weiteres Tool ist das gute alte:
free -h (die "benutzt" Spalte)

Durch die cgroups (und systemd + dessen Login) wird automatisch jeder User(user.slice) auch in die Gruppe/Ort Memory gepackt. Dort läßt sich on-the-fly eben max. Speichernutzung (RAM+Swap) verändern.
Der Ort im Dateisystem dafür wäre für den User mit der UID 1001:
/sys/fs/cgroup/memory/user.slice/user-1001.slice/
In diesem (virtuellen) Dateisystem-Ort finden sich nun etliche Dateien, aus denen Werte ausgelesen oder verändert werden können.

Angenommen dein Testuser hätte die UID 1002, du meldest dich mit diesem User an und nutzt den gleichen Desktop usw. wie dein Normaluser.
Um die max. Speichernutzung nun einzuschränken:
(Das geht nur als root, bitte nicht mit sudo arbeiten¹. Du kannst mit "su -" (ohne Anführungsstriche) in einem Terminal zum Root-User werden!)

echo 3200M > /sys/fs/cgroup/memory/user.slice/user-1002.slice/memory.limit_in_bytes
(Auslesen dieser Datei mit)
cat /sys/fs/cgroup/memory/user.slice/user-1002.slice/memory.limit_in_bytes

Würde jetzt die max. Kapazität, die die gesamte Gruppe nutzen darf, auf ~3,2G beschränken. Allerdings gibt es ja noch den Swap (bei dir 5GB). Auch dessen Nutzung sollte man beschränken, auf ein sinnvolles Maß, damit das System eben nicht nur mit Ein-/Auslagern von Speicherseiten beschäftigt ist.

echo 2G > /sys/fs/cgroup/memory/user.slice/user-1002.slice/memory.memsw.limit_in_bytes

Das regelt den User auf 2GB des verfügbaren Swap-Speichers. Diese Werte für "Ab wieviel Swap-Nutzung im Verhältnis zum verfügbaren RAM ist das System noch für mich nutzbar" sind/sollten austestbar sein.

Das zum Prinzip. Obige Werte kannst du beim Testuser ja auch mal recht radikal verkleinern, um das "Killen" zu produzieren. Wenn Prozesse aufgrund der eingestellten Werte gekillt werden, dann wird das im Journal vermerkt.
Sehr deutlich (Trap), lautstark und auch sehr informativ mit den Limits und was dieser Prozeß anfordern würde/wollte.
Ein journalctl --system -f sollte man in einem Terminalfenster mitlaufen lassen.

Ein weiteres nützliches Tool zum Rumtesten ist stress
pacman -Si stress
Mit stress (als User ausgeführt) kannst du sehr einfach Speicher anfordern/belegen, um eben Verbrauch zu simulieren.

stress --vm-bytes 1G --vm-keep -m 1

Hier würde stress nun 1GB Speicher dauerhaft belegen. (Abbruch mit STRG-C). Wenn der gewählte Wert nun über den bei memory.limit_in_bytes (inkl. aller bisher laufender Prozesse) geht, dann wird das Programm stress sofort vom OOM-Killer "ermordet". Damit kann man das schön simulieren.
Ebenso, in dem man z.B. mit stress nur soviel Speicher belegt, das die max. festgelegte Grenze noch nicht erreicht würde - aber knapp oder demnächst. Dann kann man mit anderen Programmen testen wie die sich beim Killen verhalten, z.B. was passiert mit dem Firefox wenn ich noch ein paar Tabs öffne? Was passiert mit meinem Libreoffice-Dokument(ungespeichert<sic!>), wenn ich noch etliche MB Text einfüge und so über die "magische" Grenze komme?
Deswegen halt auch der Testuser.

Ich selbst bin da auch nicht sehr dick drin in der Materie, aber es ist definitiv eine wirkungsvolle Maßnahme um User und deren Prozesse einzuschränken.

//Edit:
¹ sudo (außer du kennst das Problem und weißt, wie du es umgehst)

Beitrag geändert von GerBra (06.02.2019 00:29:15)

Offline

#11 06.02.2019 05:08:10

Galde75
Mitglied

Re: [gelöst] RAM wird aufgebraucht und System friert ein

Gibts da nicht was von Ratiopha... äh UDEV?


Man könnt sich auch ein kleines Scripts schreiben ala:
(Vorsicht Fehler können vorhanden sein, es ist 4Uhr, mein persönlicher Akku leer und System kurz vorm Auto shutdown tongue
Ist eher als Anregung gedacht)

#!/bin/bash
while [ "$STOPME" -lt 1 ] ; do
if [ `freierram` -le 100M ] ; then mpv alarm.mp3 ; else sleep 10 ; fi
done

"freierram" und "100M" dann durch ein passendes Tool/Wert ersetzen

Einmal gestartet läuft es als Dauerschleife, bis Variable "STOPME" 1 ist.

Beitrag geändert von Galde75 (06.02.2019 05:11:16)

Offline

#12 06.02.2019 09:53:20

Sneezle
Mitglied

Re: [gelöst] RAM wird aufgebraucht und System friert ein

niemand - Ich hab mich immer gefragt, ob SysRq-Tastenkombinationen nützlich sind, wenn der überlastete PC eigentlich keine Tastatureingaben mehr annimmt.  Und ob ich dann die Kombination weiß. Ich hab die Tasten aktiviert. Einmal hab ich schon über den Laptop gegooglet, wie die Kombination ist, aber darauf wurde nicht reagiert. Muss ich vielleicht mal im Normalzustand probieren, damit ich sicher sein kann, die richtigen Tasten zu benutzen.

hollex - Ja, interessante Links. OOM ist wohl mein Thema :-)

GerBra - toll, da sind schöne Anregungen bei. Das werde ich versuchen. Vielen Dank.

Galde75 - Super, damit werde ich auch experimentieren, dank Dir.

Ein Amok laufender Prozess war über atop jetzt nicht zu erkennen. Der Firefox und Webcontent belegen aber schon mal einen Großteil des Speichers, auch Office und GIMP gehören zu den üblichen Verdächtigen. Soweit aber nicht überraschend. Unter diesen künstlich erschaffenen Bedingungen war es mir leicht möglich, alles wieder zu schließen und den Speicher wieder freizugeben. Wirklich auf die Spitze getrieben hab ich es aber auch noch nicht, der RAM war aufgebraucht und der Swap angeknabbert, aber hatte noch Platz. Was mir dabei aufgefallen ist: 4 GB sind wohl recht wenig, mit 8 GB würde es vermutlich keine Überwachung brauchen. Trotzdem finde ich einen Sicherheitsmechanismus im Augenblick sinnvoller als eine sofortige Aufrüstung :-)

Da ich es wohl nicht mit einem zu korrigierenden Systemfehler zu tun habe und Ihr nützliche Vorschläge gemacht habt, mit denen die Situation unter Kontrolle gebracht werden kann, erkläre ich das Problem dankend für gelöst. Kaffee für alle!

Offline

Schnellantwort auf dieses Thema

Schreibe deinen Beitrag und versende ihn
Deine Antwort

Fußzeile des Forums