PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Arbeitsspeicher eines Prozesses bewusst begrenzen



manny
23.01.08, 07:35
Hallo Gemeinde,

ich habe hier die Aufgabe, ein Programm zu überwachen, welches unter großer HDD-I/O Last arbeitet. Dabei wäre für mich auch interresant zu wissen, wie sich das Programm verhält, wenn mein System anfängt zu swappen.

Da ich (leider) viel RAM habe, fällt es mir schwer, überhaupt so weit zu kommen, dass mein System swappt.

Kennt ihr da Tools, mit denen man den max. genutzen Arbeitsspeicher begrenzen kann ?

HEMIcuda
23.01.08, 09:34
Du koenntest die Speichergroesse beim Boot mit dem Kernelparameter mem=groesse limitieren und damit testen. Wie man den RAM waehrend der Laufzeit begrenzen kann, wuesste ich jetzt nicht.

'cuda

echo
23.01.08, 10:20
Hi,
gibt den befehl


> ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
max locked memory (kbytes, -l) 32
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
stack size (kbytes, -s) unlimited
cpu time (seconds, -t) unlimited
max user processes (-u) 3836
virtual memory (kbytes, -v) unlimited

interessant wäre wohl hier "virtual memory" und "max memory size"...
tests mal aus, vielleicht brings ja den gewünschten efekt

marce
23.01.08, 10:30
War auch meine erste Idee, aber: Wenn ich mich recht entsinne wäre der Effekt, dass der Prozess nicht mehr Speicher bekommt (und ggf. gekillt wird) - aber eben nicht gezwungen wird zu swappen und _das_ ist ja das, was der TE erreichen will...

Ob man das gewünschte ohne HW-Änderungen oder entsprechenden Kernel-Parameter erreichen kann ist fraglich. Evtl. eine entsprechend große RamDisk einrichten (ich vermute mal, die würde nicht geswappt werden?) oder/und mit der swappiness spielen, andere nicht-nice laufende Programme in den Speicher holen, ...

echo
23.01.08, 10:48
...- aber eben nicht gezwungen wird zu swappen ...


wenn dem so ist, dann frage ich mich wozu ulimit den paramter für "virtual memory" hat??? wäre ja dann überflüssig oder?

marce
23.01.08, 10:53
Moment - virtual-memory != Benutzen des swap-Speichers.


top - 11:52:07 up 50 days, 2:52, 1 user, load average: 0.00, 0.00, 0.00
Tasks: 79 total, 1 running, 77 sleeping, 0 stopped, 1 zombie
Cpu(s): 0.2%us, 0.2%sy, 0.0%ni, 99.4%id, 0.1%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 1035276k total, 805728k used, 229548k free, 306356k buffers
Swap: 1052248k total, 0k used, 1052248k free, 428916k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
17889 root 15 0 2168 896 704 R 2 0.1 0:00.01 top
1 root 15 0 2044 588 508 S 0 0.1 0:04.05 init
2 root RT 0 0 0 0 S 0 0.0 0:24.78 migration/0
...


http://en.wikipedia.org/wiki/Virtual_memory

choener
23.01.08, 11:47
VirtualBox oder VMware , oä benutzen und darin eine Linuxspielwiese einrichten.

marce
23.01.08, 11:51
... und die swappt auf HD?

m.o.o.
23.01.08, 13:41
Was spricht dagegen sich selber ein kleines Programm zu schreiben, dass sich Speicher holt? Wie ich die ersten Versuche mit malloc() durchgeführt habe, hat mein System ziemlich oft swappen müssen ;)

marce
23.01.08, 15:27
naja, das Programm muss den Speicher ja effektiv und dauernd nutzen - ansonsten wird es nur nicht der zu überprüfende Prozess geswappt - was wiederum also nichts bringt...

manny
23.01.08, 16:13
Hallo zusammen,

ja, ich habe einfach ein Programm geschrieben, welches Speicher belegt. Ich habe zwar ein Tool namen rmss gefunden, welches mir auch hilft, aber das gibt leider nur für Power PC's.

Dennoch danke für die vielen Tipps.