Es gibt viele Fragen und Antworten zum Einschränken der Ressourcen eines einzelnen Prozesses, z. B. kann RLIMIT_AS verwendet werden, um den durch einen Prozess zugewiesenen maximalen Speicher einzuschränken, der in etwa als VIRT angesehen werden kann top
. Mehr zum Thema zB hier Gibt es eine Möglichkeit, die Speicherkapazität zu begrenzen, die ein bestimmter Prozess in Unix verwenden kann?
setrlimit(2)
Dokumentation sagt:
Ein über fork (2) erstellter untergeordneter Prozess erbt die Ressourcenbeschränkungen des übergeordneten Prozesses. Ressourcenlimits werden in execve (2) beibehalten.
Es sollte folgendermaßen verstanden werden:
Wenn ein Prozess ein RLIMIT_AS von z. B. 2 GB hat, kann er nicht mehr Speicher als 2 GB zuweisen. Wenn ein untergeordnetes Element erzeugt wird, wird das Adressraumlimit von 2 GB an das untergeordnete Element weitergegeben, die Zählung beginnt jedoch bei 0. Die beiden Prozesse zusammen können bis zu 4 GB Speicher belegen.
Aber wie könnte man die Gesamtsumme des von einem ganzen Prozessbaum zugewiesenen Speichers begrenzen?
Antworten:
Ich bin nicht sicher, ob dies Ihre Frage beantwortet, aber ich habe dieses Perl-Skript gefunden , das behauptet, genau das zu tun, wonach Sie suchen. Das Skript implementiert ein eigenes System zur Durchsetzung der Grenzwerte, indem es die Ressourcennutzung des Prozesses und seiner untergeordneten Elemente aufweckt und überprüft. Es scheint gut dokumentiert und erklärt zu sein und wurde kürzlich aktualisiert.
Wie slm in seinem Kommentar sagte, können dafür auch cgroups verwendet werden. Möglicherweise müssen Sie die Dienstprogramme zum Verwalten von Gruppen installieren, vorausgesetzt, Sie arbeiten unter Linux, nach denen Sie suchen sollten
libcgroups
.Stellen Sie sicher, dass
$USER
es sich um Ihren Benutzer handelt.Ihr Benutzer sollte dann Zugriff auf die Einstellungen des Arbeitsspeichers in haben
/sys/fs/cgroup/memory/myGroup
.Sie können dann das Limit auf beispielsweise 500 MB setzen, indem Sie dies tun:
Lass uns nun Vim starten:
Der vim-Prozess und alle seine untergeordneten Elemente sollten jetzt auf 500 MB RAM beschränkt sein. Ich denke jedoch , dass dieses Limit nur für RAM gilt und nicht für Swap. Sobald die Prozesse das Limit erreichen, beginnen sie zu tauschen. Ich bin mir nicht sicher, ob Sie dies umgehen können. Ich kann keine Möglichkeit finden, die Swap-Nutzung mithilfe von cgroups einzuschränken.
quelle
sudo yum install libcgroup-tools
Ich habe mit cgmanager, das in Ubuntu verwendet wird, ein Skript erstellt, das dies ausführt. Ein Vorteil ist, dass hierfür kein Root-Zugriff erforderlich ist. Beachten Sie, dass die Gruppenverwaltung etwas distro-spezifisch ist, sodass ich nicht weiß, ob dies auf Distributionen funktioniert, die die systemd-Gruppenverwaltung verwenden.
Verwendung: Speichern Sie es unter
limitmem
Ihrem Pfad und machen Sie es ausführbar. Dann laufen zBlimitmem 1G command...
. Dies begrenzt den tatsächlich verwendeten Speicher. Wenn dies erreicht ist, bricht der OOM-Killer den Prozess oder eines seiner Kinder ab, aber nicht etwas Zufälliges, das nichts mit diesem Befehl zu tun hat.quelle
cgm
Anleitung, es war nützlich/unix//a/536046/4319 :
Auf jeder systemd-basierten Distribution können Sie cgroups auch indirekt über systemd-run verwenden.
pdftoppm
Verwenden Sie beispielsweise für den Fall der Beschränkung auf 500 MB RAM Folgendes:...
quelle