Hi
eigentlich will ich die RAM-Nutzung bestimmter programme einschränken. Da die produktive System mit einen Enteprise Linux ausgestatte sind wo es noch keine cgroups gibt bleibt mir nur der weg über limits.conf (Unsere Erfahrungen sind nutzt das Programm, Grafikmanipulation, mehr als 2GB Ram dann wird es in 95% der Fälle wenn es dann irgendwann keinen RAM mehr gibt abstürzen. Bis zum Absturz dauert es und in der Zeit passiert nichts also wollen wir den "Absturz" ehr erzwingen, da wird das File "händig" bearbeitet.
Also will ich den User der das Programm startet einschränken ---
limits.conf: ...
twist hard memlock 2097152 twist soft memlock 1048576 ##
##memlock - max locked-in-memory address space (KB) ---
Leider finde ich keine weiteresn Angabe dazu, Die RAM nutzung ist nicht gleich der "memlock" kennt jemand eine Berechnungsformel?
Kennt jemand eine andere Lösung wie man die RAM-Nutzung von Programmen einschränkt
Danke Andreas
Hi Andreas,
On 26.07.2013, at 13:17, Grimnin Fridyson fridy_lugdd@yahoo.de wrote:
limits.conf: ...
twist hard memlock 2097152 twist soft memlock 1048576 ##
##memlock - max locked-in-memory address space (KB)
Leider finde ich keine weiteresn Angabe dazu, Die RAM nutzung ist nicht gleich der "memlock" kennt jemand eine Berechnungsformel?
Die Memlock-Limits sind für den mlock() syscall, um den Adressraum des Programmes im Speicher zu locken und vor Swapping zu schützen. Das hilft dir also nur, wenn dein Programm mlock() nutzt.
Kennt jemand eine andere Lösung wie man die RAM-Nutzung von Programmen einschränkt
Was du suchst, dürfte die Direktive as (address space) in der limits.conf sein, die den maximalen Adressraum eines Programmes einschränkt. Hier solltest du allerdings ein paar Bytes für die üblichen Speicherbereiche dazu rechnen (data, bss, gemappte .so's etc.pp).
MfG Maddin
Hallo Maddin,
On Sat, Jul 27, 2013 at 02:44:15 +0200, Maddin wrote:
Was du suchst, dürfte die Direktive as (address space) in der limits.conf sein, die den maximalen Adressraum eines Programmes einschränkt. Hier solltest du allerdings ein paar Bytes für die üblichen Speicherbereiche dazu rechnen (data, bss, gemappte .so's etc.pp).
Address Space (Virtual Size) kann aber deutlich hoeher liegen als der tatsaechliche RAM-Verbrauch eines Prozesses. Ich wuerde eher die Direktive "data" nehmen (siehe limits.conf(5)).
Gruss, Chris
Hallo Christian,
Address Space (Virtual Size) kann aber deutlich hoeher liegen als der tatsaechliche RAM-Verbrauch eines Prozesses. Ich wuerde eher die Direktive "data" nehmen (siehe limits.conf(5)).
Du hast recht, da ist der Heap mit drin, hatte ich überlesen :-)
Auch das scheint noch nicht das gelbe vom Ei zu sein:
man 3 malloc
NOTE: Normally, malloc() allocates memory from the heap, and adjusts the size of the heap as required, using sbrk(2). When allocating blocks of memory larger than MMAP_THRESHOLD bytes, the glibc malloc() implementation allocates the memory as a private anonymous mapping using mmap(2). MMAP_THRESHOLD is 128 kB by default, but is adjustable using mallopt(3). Allocations performed using mmap(2) are unaffected by the RLIMIT_DATA resource limit (see getrlimit(2)).
Also vielleicht doch "as", mit vorher mal schauen was das Programm alles mapped...
MfG Maddin
----- Ursprüngliche Message -----
Von: Maddin ml@megamaddin.org An: Linux-User-Group Dresden lug-dd@mailman.schlittermann.de CC: Gesendet: 18:55 Samstag, 27.Juli 2013 Betreff: Re: ressourcen einschränken
Hallo Christian,
Address Space (Virtual Size) kann aber deutlich hoeher liegen als der tatsaechliche RAM-Verbrauch eines Prozesses. Ich wuerde eher die
Direktive
"data" nehmen (siehe limits.conf(5)).
Habe mich entschlossen beides zu verwenden
mit unterschiedlichen Werten
erste Test sahen gut aus, aber denke mal das die Werte noch optimiert werden
Thx
Andreas
Du hast recht, da ist der Heap mit drin, hatte ich überlesen :-)
Auch das scheint noch nicht das gelbe vom Ei zu sein:
man 3 malloc
NOTE: Normally, malloc() allocates memory from the heap, and adjusts the size of the heap as required, using sbrk(2). When allocating blocks of memory larger than MMAP_THRESHOLD bytes, the glibc malloc() implementation allocates the memory as a private anonymous mapping using mmap(2). MMAP_THRESHOLD is 128 kB by default, but is adjustable using mallopt(3). Allocations performed using mmap(2) are unaffected by the RLIMIT_DATA resource limit (see getrlimit(2)).
Also vielleicht doch "as", mit vorher mal schauen was das Programm alles mapped...
MfG Maddin _______________________________________________ Lug-dd maillist - Lug-dd@mailman.schlittermann.de https://ssl.schlittermann.de/mailman/listinfo/lug-dd
lug-dd@mailman.schlittermann.de