Programme automatisch beenden wenn zu groß?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
desputin
Beiträge: 1349
Registriert: 24.04.2015 17:16:34

Programme automatisch beenden wenn zu groß?

Beitrag von desputin » 06.07.2020 09:48:47

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
https://www.daswirdmanjawohlnochsagenduerfen.de
https://www.neoliberalyse.de - Über die Ökonomisierung aller Lebensbereiche. |

Benutzeravatar
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ß?

Beitrag von Lord_Carlos » 06.07.2020 09:54:50

Vielleicht Debianearlyoom?
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!

Benutzeravatar
MSfree
Beiträge: 11604
Registriert: 25.09.2007 19:59:30

Re: Programme automatisch beenden wenn zu groß?

Beitrag von MSfree » 06.07.2020 10:35:46

Lord_Carlos hat geschrieben: ↑ zum Beitrag ↑
06.07.2020 09:54:50
By default if both are below 10%, it will kill the largest process (highest oom_score).
Der Linuxkernel macht das doch auch selbst. Wozu sollte man dazu also ein extra Paket installieren?
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.

Benutzeravatar
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ß?

Beitrag von Lord_Carlos » 06.07.2020 10:42:10

MSfree hat geschrieben: ↑ zum Beitrag ↑
06.07.2020 10:35:46
Lord_Carlos hat geschrieben: ↑ zum Beitrag ↑
06.07.2020 09:54:50
By default if both are below 10%, it will kill the largest process (highest oom_score).
Der Linuxkernel macht das doch auch selbst.
Brudi klick doch einfach mal auf den link :P
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!

Colttt
Beiträge: 3012
Registriert: 16.10.2008 23:25:34
Wohnort: Brandenburg
Kontaktdaten:

Re: Programme automatisch beenden wenn zu groß?

Beitrag von Colttt » 06.07.2020 10:51:24

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

Code: Alles auswählen

/etc/cgrules.conf
*:Mathematica                                   memory      math
*:WolframKernel                                 memory      math
*:julia                                         memory      math
*:python                                        memory      math
*:matlab                                        memory      math
hier setzen wir dann das Limit

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 :D

ZABBIX Certified Specialist

Benutzeravatar
desputin
Beiträge: 1349
Registriert: 24.04.2015 17:16:34

Re: Programme automatisch beenden wenn zu groß?

Beitrag von desputin » 06.07.2020 12:19:39

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:

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).
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:

Code: Alles auswählen

earlyoom -m 15
ist das dann auch nach einem Neustart aktiv?
https://www.daswirdmanjawohlnochsagenduerfen.de
https://www.neoliberalyse.de - Über die Ökonomisierung aller Lebensbereiche. |

JTH
Moderator
Beiträge: 3077
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: Programme automatisch beenden wenn zu groß?

Beitrag von JTH » 06.07.2020 14:03:42

desputin hat geschrieben: ↑ zum Beitrag ↑
06.07.2020 12:19:39
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?
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).

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.

desputin hat geschrieben: ↑ zum Beitrag ↑
06.07.2020 12:19:39
Wenn ich also einstelle:

Code: Alles auswählen

earlyoom -m 15
ist das dann auch nach einem Neustart aktiv?
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.
Manchmal bekannt als Just (another) Terminal Hacker.

Benutzeravatar
desputin
Beiträge: 1349
Registriert: 24.04.2015 17:16:34

Re: Programme automatisch beenden wenn zu groß?

Beitrag von desputin » 06.07.2020 14:54:32

Hallo JTH,
super, vielen Dank. In der Config-Datei habe ich jetzt

Code: Alles auswählen

#Available minimum memory
EARLYOOM_ARGS="-m 12"
eingestellt. Müßte dann also bei 88% Ram-Belegung einspringen. Mal gucken, ob es klappt.
https://www.daswirdmanjawohlnochsagenduerfen.de
https://www.neoliberalyse.de - Über die Ökonomisierung aller Lebensbereiche. |

Benutzeravatar
desputin
Beiträge: 1349
Registriert: 24.04.2015 17:16:34

Re: Programme automatisch beenden wenn zu groß?

Beitrag von desputin » 01.09.2020 15:18:59

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:

Code: Alles auswählen

#Options to pass to earlyoom
EARLYOOM_ARGS="-r 60"
[...]
# Available minimum memory 5%
EARLYOOM_ARGS"-m 12"
Viele Grüße desputin
https://www.daswirdmanjawohlnochsagenduerfen.de
https://www.neoliberalyse.de - Über die Ökonomisierung aller Lebensbereiche. |

rodney
Beiträge: 370
Registriert: 09.12.2016 04:15:59

Re: Programme automatisch beenden wenn zu groß?

Beitrag von rodney » 01.09.2020 16:22:08

desputin hat geschrieben: ↑ zum Beitrag ↑
01.09.2020 15:18:59
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"
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.

In deinem Fall wird eigentlich nur eine Zeile benoetigt:

Code: Alles auswählen

EARLYOOM_ARGS="-r 60 -m 12"

Benutzeravatar
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ß?

Beitrag von Lord_Carlos » 01.09.2020 16:37:21

Es hat auch ein paar nette Parameter um Programme zu bevorzugen oder zu vermeiden.

Code: Alles auswählen

EARLYOOM_ARGS="-m 12 -r 60 --avoid '(^|/)(init|Xorg|ssh)$' --prefer '(^|/)(java|chromium)$'"
Bei prefer kannst du ja dein geodaten Programm eintragen.

Code: Alles auswählen

╔═╗┬ ┬┌─┐┌┬┐┌─┐┌┬┐╔╦╗
╚═╗└┬┘└─┐ │ ├┤ │││ ║║
╚═╝ ┴ └─┘ ┴ └─┘┴ ┴═╩╝ rockt das Forum!

Benutzeravatar
desputin
Beiträge: 1349
Registriert: 24.04.2015 17:16:34

Re: Programme automatisch beenden wenn zu groß?

Beitrag von desputin » 05.09.2020 01:23:29

Ok, dankt Euch! Ich teste das mal die Tage...
https://www.daswirdmanjawohlnochsagenduerfen.de
https://www.neoliberalyse.de - Über die Ökonomisierung aller Lebensbereiche. |

Antworten