[linux-l] Java Thread vs. c fork

Ihno Krumreich ihno at lst.de
Do Okt 23 08:12:44 CEST 2003


On Wed, Oct 22, 2003 at 11:26:56AM +1000, Peter Ross wrote:
> 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.
> 
> Ich habe wie gesagt kein Linux zur Hand, koennte mir aber vorstellen, das
> da auch Variablen zunaechst den Test behindern.

Bei 2.4.19-Suse werden die Strukturen dynamisch angelegt (ich weiss
nicht, ob dies im vanilla Linux-Kernel auch so ist, oder ob das
SuSE spezifisch ist)

> 
> 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.

Fehler von mir. I hatte angenommen, das die Strukturen immer dynamisch
angelegt werden.

Gruss

Ihno




Mehr Informationen über die Mailingliste linux-l