Verwenden von ulimit zum Begrenzen der Speichermenge, die ein Skript verwenden kann

Verwenden von ulimit zum Begrenzen der Speichermenge, die ein Skript verwenden kann

Ich habe ein Ubuntu-System und ein Skript, das regelmäßig ausgeführt wird. Ich muss die maximale Speichermenge begrenzen, die dieses Skript verwenden kann. Soweit ich weiß, ulimitgibt es dafür einen Befehl, aber ich bekomme ihn nicht zum Laufen.

Ich habe beispielsweise folgendes Skript:

#! /bin/bash

ulimit -m 1024

X="x"
seq 100 | while read LINE ; do
    X="$X$X"
done

Dies sollte $Xdie Größe erhöhen, und dieses Beispiel ist genau die Art von Dingen, die ich begrenzen möchte. Der ulimit-Aufruf scheint jedoch nicht zu funktionieren. Ich kann das Skript ordnungsgemäß ausführen, es stürzt nicht ab und topzeigt mir an, dass das Skript viel Speicher erhält. Was mache ich falsch? Wie kann ich dieses Skript zwingen, nie mehr als eine bestimmte Speichermenge zu verwenden?

Antwort1

Ich konnte das Skript mit der -vfolgenden Option zum Fehlerausgeben bringen:

#!/bin/bash

ulimit -v 100000
for i in {1..10000000}
do
    x="x"$x
done

Auf der Bash-Manpage steht:

-m Die maximale Resident Set-Größe (viele Systeme berücksichtigen dies nicht)
              diese Grenze)

Antwort2

Versuchen Sie, den virtuellen Speicher zu begrenzen:

ulimit -v 1024 

verwandte Informationen