[linux-l] Java Thread vs. c fork
Peter Ross
Peter.Ross at alumni.tu-berlin.de
Mi Okt 22 03:26:56 CEST 2003
On Wed, 22 Oct 2003, Ihno Krumreich wrote:
> fork scheitert im allgemeinen immer an Speichermangel. Einfache
> Rechnung: Allein jeder Prozessleitblock braucht auf intel 4K
> Bei 1000 Prozessen allein 4 MByte. Darin ist noch nicht enthalten
> der Speicher fuer Stack und aehnliches. Ich habe es bisher nur auf
> Rechnern mit mehreren Gigabyte RAM erlebt, dass das Limit von
> 32760 (maximale Anzahl Prozesse im Linux-System) erreicht wurde.
Ich habe den C-Test spasseshalber unter FreeBSD-5.1 nachvollziehen wollen
(Linux ist gerade nicht da)
Hier wird zur Bootzeit fuer Prozessstrukturen statisch Platz geschaffen,
und das ist ueber eine sysctl-Variable beim Booten einstellbar:
> cat /boot/loader.conf
kern.maxproc="1280"
Der Default eines FreeBSD-5.1 liegt bei 996 Prozessen.
Zur Laufzeit kann man kern.maxprocperuid erhoehen, das war zunaechst auch
eine Huerde (bei 996 Prozessen insgesamt war diese Variable auf 896
gesetzt).
Wegen dieser beiden Variablen schlug das tausendfache Forken des
Testprogramms fehl.
Ich habe wie gesagt kein Linux zur Hand, koennte mir aber vorstellen, das
da auch Variablen zunaechst den Test behindern.
Ich habe bei einem Debian woody mal ein Problem mit einer begrenzten
Anzahl von MySQL-Threads gehabt, deren Ursache in einer
ulimit-Variable lag (in einer /etc-Datei gesetzt, weiss leider nicht mehr
welche, es ist nicht /etc/login.conf wie bei FreeBSD, die hatte ich
vermisst..)
Hier schlaegt die Prozess=Thread-Falle zu, hat doch ulimit jeden Thread
als Prozess gezaehlt.
Wie auch immer - ich wuerde den "Out-Of-Memory"-Fehler nicht als letzte
Weissheit hinnehmen und zumindest die Prozesslimits pruefen.
Gruss
Peter
Mehr Informationen über die Mailingliste linux-l