PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Speicherueberlauf



HotSpott
14-04-2004, 23:40
Hi!

Ich bin ein bischen am c++ lernen und habe spasseshalber mal probiert, ein Programm
zu schreiben, dass in eine while schleife andauernd nur fork()-t. Das laeuft sehr lange, bis
irgendwann mal auf keine Eingabe mehr reagiert wird, sich mein X verabschiedet und ich
dann irgendwann mal wieder am Login stehe. Dann hat er sich gefangen.


Habe mir dann ein mini c++ Prog geschrieben, dass nur ein Objekt anlegt, in dessen
Konstruktor wieder ein Objekt vom gleichen Typ mit new Objekt() angelegt wird. Bei
diesem Prog bekomme ich innerhalb kuerzester Zeit einen Seg Fault. X bleibt davon
unbeeindruckt. Und auch sonst macht das System nicht den Eindruck, als wuerde es
grossartig belastet.


Kann mir das jemand erklaeren? Es muellt doch sowohl, das ausufernde Prozessklonen,
als auch die ausufernde Objekterzeugung den Speicher zu. Wieso sind die Ergebnisse so
unterschiedlich?

Und wie muss man einen Rechner konfigurieren, dass jemand, der z.b. so ein kleines Prog,
dass sich andauernd nur selbst fork()ed nicht die ganze Kiste zum erlahmen bringt?


Gruss

Hotspott

LeoManiac
14-04-2004, 23:58
Ich bin mir nicht ganz sicher aber ich kanns mir so erklären:

Beim Objekt erzeugen wird nur der Speicher vollgemüllt.
Aber neu erzeugte Prozesse müssen noch zusätzlich verwaltet werden und es ne Grenze gibt vom max. gleichzeitig laufenden Prozessen sobald die erreicht ist ist schicht.

Ich denke auch mal das die Grenze vom Prozessor abhängig sind.

Korrigiert micht bitte wenn ich falsch liege ;)

RapidMax
15-04-2004, 20:52
Original geschrieben von HotSpott
Und wie muss man einen Rechner konfigurieren, dass jemand, der z.b. so ein kleines Prog,
dass sich andauernd nur selbst fork()ed nicht die ganze Kiste zum erlahmen bringt?

Das wird über PAM geregelt. Unter SuSE und Debian (und vermutlich anderen Distris auch) findest du eine gut kommentierte /etc/security/limits.conf, welche unter anderem die Einstellung "nproc" für die Anzahl Prozesse enthält.

Gruss, Andy