Wie beschränke ich die Speicherbelegung eines bestimmten Prozesses in Linux?

9975
user20222

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

7

1 Antwort auf die Frage

8
basszero

Sie möchten ulimit verwenden

ulimit kann unter anderem zur Begrenzung der Speichernutzung verwendet werden

Hier ist ein Beispiel für die Einstellung des Speicherverbrauchs so niedrig, dass /bin/ls(der größer ist 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 festlege, 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 Ressourcenkappen anzuzeigen, die ulimits setzen können.

Gibt es etwas, das auf Einzelbenutzerbasis etwas Ähnliches macht? Ich habe keine Erlaubnis, systemweite Änderungen vorzunehmen. user20222 vor 14 Jahren 0
@ user20222: Sie können ulimit in der Befehlszeile oder in einem Skript in Bash verwenden. Dennis Williamson vor 14 Jahren 0
Ich bekomme-- ulimit: maximale Speichergröße: Limit kann nicht geändert werden: Vorgang nicht zulässig user20222 vor 14 Jahren 0
Was genau hast du versucht? Veröffentlichen Sie die von Ihnen verwendete Befehlszeile basszero vor 14 Jahren 0
"ulimit -m 1000" und "ulimit -H -m 1000". Ich tat dies auch: "ulimit -S -m 1000", der nicht fehlerhaft ist, aber die Speicherbegrenzung für das Programm nicht erzwungen hat. user20222 vor 14 Jahren 0
Ich habe mit dem Sysadmin gesprochen und bin mir nicht sicher, was falsch war, aber er hat das Problem behoben. user20222 vor 14 Jahren 0
Auf meinem System scheint das Schlüsselwort ulimit "-v" (virtueller Speicher) zu sein. Das Setzen von "-m" scheint nichts zu erreichen. eswald vor 13 Jahren 0
Durch die Einstellung von -m wird die Verwendung von physischem RAM auf Systemen, die dies erzwingen, begrenzt. Durch die Einstellung von -v wird die Verwendung von virtuellem RAM auf Systemen eingeschränkt, die dies erzwingen. David Schwartz vor 12 Jahren 0