Programme automatisch beenden wenn zu groß?
Programme automatisch beenden wenn zu groß?
Hallo Ihr,
kann ich Debian irgendwie dazu bringen, Programme automatisch abzuschießen, wenn sie eine bestimmte GB-Zahl im Arbeitsspeicher überschreiten?
Ich arbeite nämlich z.T. mit sehr großen Geodaten, die beim Öffnen den Rechner zum Einfrieren bringen. So ein 16-GB-Speicher ist ja schon in wenigen Sekunden voll...
Viele Grüße desputin
kann ich Debian irgendwie dazu bringen, Programme automatisch abzuschießen, wenn sie eine bestimmte GB-Zahl im Arbeitsspeicher überschreiten?
Ich arbeite nämlich z.T. mit sehr großen Geodaten, die beim Öffnen den Rechner zum Einfrieren bringen. So ein 16-GB-Speicher ist ja schon in wenigen Sekunden voll...
Viele Grüße desputin
https://www.daswirdmanjawohlnochsagenduerfen.de
https://www.neoliberalyse.de - Über die Ökonomisierung aller Lebensbereiche. |
https://www.neoliberalyse.de - Über die Ökonomisierung aller Lebensbereiche. |
- Lord_Carlos
- Beiträge: 5578
- Registriert: 30.04.2006 17:58:52
- Lizenz eigener Beiträge: GNU Free Documentation License
- Wohnort: Dänemark
Re: Programme automatisch beenden wenn zu groß?
Vielleicht earlyoom?
https://github.com/rfjakob/earlyoom
https://github.com/rfjakob/earlyoom
earlyoom checks the amount of available memory and free swap up to 10 times a second (less often if there is a lot of free memory). By default if both are below 10%, it will kill the largest process (highest oom_score). The percentage value is configurable via command line arguments.
Code: Alles auswählen
╔═╗┬ ┬┌─┐┌┬┐┌─┐┌┬┐╔╦╗
╚═╗└┬┘└─┐ │ ├┤ │││ ║║
╚═╝ ┴ └─┘ ┴ └─┘┴ ┴═╩╝ rockt das Forum!
Re: Programme automatisch beenden wenn zu groß?
Der Linuxkernel macht das doch auch selbst. Wozu sollte man dazu also ein extra Paket installieren?Lord_Carlos hat geschrieben:06.07.2020 09:54:50By default if both are below 10%, it will kill the largest process (highest oom_score).
Ein Rechner friert vor allem dann (scheinbar) ein, wenn die Kiste extrem viel Platten-IO macht. Also dann, wenn man riesiege Datenmengen einliest, das RAM dabei ausgeht, und dann die Kiste für jedes eingelesene Byte je nach Pagesize bis zu 2MB in den Swapspeicher schreiben muß.
Wenn man da erst bei 90% Hauptspeicher- und 90% Swapbelegung reagiert, hat man nichts gewonnen. Bis diese 90% Swap erreicht sind, ist der Rechner halt genauso eingefroren.
Ein gewisse Abhilfe kann Dwap auf einer SSD bringen, was aber zu Lasten der SSD-Lebenserwartung geht. Am Ende ist RAM aber durch nichts zu ersetzen als durch noch mehr RAM (frei nach Oettinger).
Und wenn man will, daß die Kiste große Prozesse killt, bevor der Swap verwendet wird, muß man den Swap einfach abschalten.
- Lord_Carlos
- Beiträge: 5578
- Registriert: 30.04.2006 17:58:52
- Lizenz eigener Beiträge: GNU Free Documentation License
- Wohnort: Dänemark
Re: Programme automatisch beenden wenn zu groß?
Brudi klick doch einfach mal auf den linkMSfree hat geschrieben:06.07.2020 10:35:46Der Linuxkernel macht das doch auch selbst.Lord_Carlos hat geschrieben:06.07.2020 09:54:50By default if both are below 10%, it will kill the largest process (highest oom_score).
Es gibt schon ein Grund warum kernel OOM eine schlechtes Ansehen hat und Fedora(?) early OOM by default mit ausliefert.
Wann early OOM zugreift kann konfiguriert werden.
Code: Alles auswählen
╔═╗┬ ┬┌─┐┌┬┐┌─┐┌┬┐╔╦╗
╚═╗└┬┘└─┐ │ ├┤ │││ ║║
╚═╝ ┴ └─┘ ┴ └─┘┴ ┴═╩╝ rockt das Forum!
Re: Programme automatisch beenden wenn zu groß?
via cgroups kannst du das ganze auch von vornherein konfigurieren und sagen er darf nur XY an GB nutzen..
hier mal ein Beispiel bei uns:
erst sagen was dazu gehört, was zu limitieren möchtest und welche "gruppe" das ist
hier setzen wir dann das Limit
hier mal ein Beispiel bei uns:
erst sagen was dazu gehört, was zu limitieren möchtest und welche "gruppe" das ist
Code: Alles auswählen
/etc/cgrules.conf
*:Mathematica memory math
*:WolframKernel memory math
*:julia memory math
*:python memory math
*:matlab memory math
Code: Alles auswählen
cat /etc/cgconfig.conf
group math {
memory {
# 209715200 = 200MB 188743680 = 180MB
# 262144000 = 250MB
#
# 483183820800 = 450 GB =450G
#memory.soft_limit_in_bytes=450G
memory.limit_in_bytes=470G;
#memory.memsw.limit_in_bytes=2G;
}
}
Debian-Nutzer
ZABBIX Certified Specialist
ZABBIX Certified Specialist
Re: Programme automatisch beenden wenn zu groß?
Hallo Ihr,
danke für die Antworten!
Ich würde erstmal lord_carlos-Lösung probieren, scheint einfach zu sein.
Was ich bei earlyoom noch nicht verstehe, ist, was das bedeutet:
Was mache ich also, wenn ich will, daß ein Prozeß abgeschlossen wird, wenn er sagen wir 50% des Ram ausfüllt oder der Ram nur noch zu 15% frei ist?
Wenn ich also einstelle: ist das dann auch nach einem Neustart aktiv?
danke für die Antworten!
Ich würde erstmal lord_carlos-Lösung probieren, scheint einfach zu sein.
Was ich bei earlyoom noch nicht verstehe, ist, was das bedeutet:
Code: Alles auswählen
earlyoom --help
-m PERCENT[,KILL_PERCENT] set available memory minimum to PERCENT of total (default 10 %).
earlyoom sends SIGTERM once below PERCENT, then SIGKILL once below
KILL_PERCENT (default PERCENT/2).
Wenn ich also einstelle:
Code: Alles auswählen
earlyoom -m 15
https://www.daswirdmanjawohlnochsagenduerfen.de
https://www.neoliberalyse.de - Über die Ökonomisierung aller Lebensbereiche. |
https://www.neoliberalyse.de - Über die Ökonomisierung aller Lebensbereiche. |
Re: Programme automatisch beenden wenn zu groß?
Das ist nicht das, was earlyoom und der Kernel-OOM-Killer tun. Beide überwachen, wie viel % des gesamten RAMs (und Swaps) noch frei sind. Wenn da eine gewisse Schwelle unterschritten ist, wird derjenige Prozess ausgewählt und beendet, der den größten Teil das Speichers verbraucht (plus eine einstellbare Gewichtung).desputin hat geschrieben:06.07.2020 12:19:39Was mache ich also, wenn ich will, daß ein Prozeß abgeschlossen wird, wenn er sagen wir 50% des Ram ausfüllt oder der Ram nur noch zu 15% frei ist?
Das Ganze legt keine Grenze fest, wie viel % des Speichers jeder einzelne Prozess belegen darf. Dafür müsstest du, wie Colttt schreibt, eine cgroup für jeden einzelnen zu beschränkenden Prozess benutzen.
Du kannst earlyoom allerdings mit --prefer recht leicht sagen, bestimmte Prozesse noch bevorzugter zu beenden.
Nein. earlyoom ist ein Daemon, der dauernd laufen muss. Die verwendeten Parameter kanns du in /etc/default/earlyoom einstellen. Du muss earlyoom nicht von Hand aufrufen.desputin hat geschrieben:06.07.2020 12:19:39Wenn ich also einstelle:ist das dann auch nach einem Neustart aktiv?Code: Alles auswählen
earlyoom -m 15
Manchmal bekannt als Just (another) Terminal Hacker.
Re: Programme automatisch beenden wenn zu groß?
Hallo JTH,
super, vielen Dank. In der Config-Datei habe ich jetzt
eingestellt. Müßte dann also bei 88% Ram-Belegung einspringen. Mal gucken, ob es klappt.
super, vielen Dank. In der Config-Datei habe ich jetzt
Code: Alles auswählen
#Available minimum memory
EARLYOOM_ARGS="-m 12"
https://www.daswirdmanjawohlnochsagenduerfen.de
https://www.neoliberalyse.de - Über die Ökonomisierung aller Lebensbereiche. |
https://www.neoliberalyse.de - Über die Ökonomisierung aller Lebensbereiche. |
Re: Programme automatisch beenden wenn zu groß?
Hallo Ihr,
jetzt hatte ich wieder einen Totalasturz wegen vollen Arbeitsspeichers! habe ich in der /etc/default/earlyoom die Schreibeweise korrekt? Oder wieso hat es nicht geklappt?
Aktiv in der Datei sind nun zwei Zeilen:
Viele Grüße desputin
jetzt hatte ich wieder einen Totalasturz wegen vollen Arbeitsspeichers! habe ich in der /etc/default/earlyoom die Schreibeweise korrekt? Oder wieso hat es nicht geklappt?
Aktiv in der Datei sind nun zwei Zeilen:
Code: Alles auswählen
#Options to pass to earlyoom
EARLYOOM_ARGS="-r 60"
[...]
# Available minimum memory 5%
EARLYOOM_ARGS"-m 12"
https://www.daswirdmanjawohlnochsagenduerfen.de
https://www.neoliberalyse.de - Über die Ökonomisierung aller Lebensbereiche. |
https://www.neoliberalyse.de - Über die Ökonomisierung aller Lebensbereiche. |
Re: Programme automatisch beenden wenn zu groß?
Entweder fehlt in der Zeile EARLYOOM_ARGS"-m 12" das = oder sogar += (sonst wird der Inhalt der Variablen EARLYPPM_ARGS von Zeile 1 in der zweiten Zeile ueberschrieben.desputin hat geschrieben:01.09.2020 15:18:59Aktiv in der Datei sind nun zwei Zeilen:Code: Alles auswählen
#Options to pass to earlyoom EARLYOOM_ARGS="-r 60" [...] # Available minimum memory 5% EARLYOOM_ARGS"-m 12"
In deinem Fall wird eigentlich nur eine Zeile benoetigt:
Code: Alles auswählen
EARLYOOM_ARGS="-r 60 -m 12"
- Lord_Carlos
- Beiträge: 5578
- Registriert: 30.04.2006 17:58:52
- Lizenz eigener Beiträge: GNU Free Documentation License
- Wohnort: Dänemark
Re: Programme automatisch beenden wenn zu groß?
Es hat auch ein paar nette Parameter um Programme zu bevorzugen oder zu vermeiden.
Bei prefer kannst du ja dein geodaten Programm eintragen.
Code: Alles auswählen
EARLYOOM_ARGS="-m 12 -r 60 --avoid '(^|/)(init|Xorg|ssh)$' --prefer '(^|/)(java|chromium)$'"
Code: Alles auswählen
╔═╗┬ ┬┌─┐┌┬┐┌─┐┌┬┐╔╦╗
╚═╗└┬┘└─┐ │ ├┤ │││ ║║
╚═╝ ┴ └─┘ ┴ └─┘┴ ┴═╩╝ rockt das Forum!
Re: Programme automatisch beenden wenn zu groß?
Ok, dankt Euch! Ich teste das mal die Tage...
https://www.daswirdmanjawohlnochsagenduerfen.de
https://www.neoliberalyse.de - Über die Ökonomisierung aller Lebensbereiche. |
https://www.neoliberalyse.de - Über die Ökonomisierung aller Lebensbereiche. |