Begrenzen der Gesamtspeichernutzung für untergeordnete Prozesse

Begrenzen der Gesamtspeichernutzung für untergeordnete Prozesse

Ich habe ein Skript mit langer Laufzeit, das mehrere untergeordnete Prozesse auf einem Linux-Rechner mit 8 GB Arbeitsspeicher startet. Nach ein paar Stunden Laufzeit nimmt es fast 90 % des Arbeitsspeichers ein, und das führt dazu, dass andere Dienste, wie SSH, nicht mehr reagieren, wenn es mit dem Disk Swapping beginnt.

Was ist die beste Möglichkeit, die Gesamtspeichernutzung für mein Skript und alle untergeordneten Prozesse programmgesteuert zu begrenzen, ohne für jeden Prozess einzeln ein bestimmtes Speicherlimit festzulegen? Verschiedene untergeordnete Prozesse können sehr unterschiedliche Speichermengen verwenden, daher wäre es sehr ineffizient, feste Schwellenwerte festzulegen.

Idealerweise würde ich einfach „nur bis zu 75 % des Speichers verwenden“ angeben und das System dies nach Bedarf unter den untergeordneten Elementen aufteilen lassen, um sicherzustellen, dass ich mich jederzeit per SSH mit dem Computer verbinden kann. Ich habe zunächst versucht, einen Cron-Job einzurichten, um sshd automatisch auf die höchste Priorität zu setzen, aber das hatte keine Wirkung und ich kann mich regelmäßig nicht per SSH verbinden oder die SSH-Eingabeaufforderung ist ungewöhnlich langsam.

Antwort1

Führen Sie die Prozesse als dedizierter Benutzer aus und richten Sie sie ein überKontrollgruppen:

/etc/cgconfig.conf:

group limitedram {
    memory {
        memory.limit_in_bytes = 6442450944;
    }
}

Und /etc/cgrules.conf:

serviceuser   memory   limitedram/

Dadurch wird der Speicherverbrauch serviceuserauf 6 GB begrenzt.

verwandte Informationen