Wie beschränke ich die Speichernutzung eines bestimmten Prozesses unter Linux?


7

Ich habe ein Programm für eine Klasse geschrieben, die mein Professor in verschiedenen Umgebungen mit wenig Arbeitsspeicher testen wird, um zu sehen, wie es sich verhält, wenn dem Programm der Arbeitsspeicher ausgeht. Gibt es eine Möglichkeit, die Ausführung in einer Umgebung mit wenig Speicher zu simulieren, ohne eine virtuelle Maschine zu erstellen?

Antworten:


8

Sie möchten ulimit verwenden

ulimit kann verwendet werden, um die Speichernutzung zu begrenzen (unter anderem)

Hier ist ein Beispiel dafür, wie die Speichernutzung so niedrig eingestellt wird, dass /bin/ls(größer als /bin/cat) nicht mehr funktioniert, aber /bin/catimmer noch funktioniert.

$ ls -lh /bin/ls /bin/cat
-rwxr-xr-x 1 root root 25K May 24 2008 /bin/cat
-rwxr-xr-x 1 root root 88K May 24 2008 /bin/ls
$ date > test.txt
$ ulimit -d 10000 -m 10000 -v 10000
$ /bin/ls date.txt
/bin/ls: error while loading shared libraries: libc.so.6: failed to map segment from shared object: Cannot allocate memory
$ /bin/cat date.txt
Thu Mar 26 11:51:16 PDT 2009
$

Hinweis: Wenn ich die Grenzwerte auf 1000 Kilobyte setze, funktioniert keines der beiden Programme, da sie Bibliotheken laden, die ihre Größe erhöhen. über 1000 KB.

-d Datensegmentgröße

-m maximale Speichergröße

-v Größe des virtuellen Speichers

Führen Sie ulimit -a aus, um alle Ressourcenobergrenzen anzuzeigen, die ulimits festlegen kann.


Gibt es etwas, das auf Einzelbenutzerbasis etwas Ähnliches tut? Ich habe nicht die Berechtigung, systemweite Änderungen vorzunehmen.
user20222

@ user20222: Sie können ulimit in der Befehlszeile oder in einem Skript in Bash verwenden.
Bis auf weiteres angehalten.

Ich bekomme-- ulimit: maximale Speichergröße: Limit kann nicht
geändert werden

Was genau hast du versucht?
Veröffentlichen

"ulimit-m 1000" und "ulimit -H-m 1000". Ich habe auch folgendes getan: "ulimit -S -m 1000", was keinen Fehler machte, aber das Speicherlimit für das Programm nicht erzwang.
user20222
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.