Stack-Size von Java-Threads der win32 Java-VM

roadrunner_gs

tune speedigel
Registriert
2. September 2003
Reaktionspunkte
24
Ort
Berlin
Hallo!

Der Titel sagt es eigentlich schon: Hat jemand von euch Ahnung, wie groß die Stack-Size von Threads der win32 Java-VM sind?

Wir haben auf Arbeit das Problem, dass eine Anwendung immer die Segel streicht wenn das System knapp 1750 Threads hat, ab 1700 Threads fangen die Probleme an und bei > 1750 Threads laufen alle Anwendungen die auf diese Serveranwendung zugreifen nicht mehr und die Serveranwendung muss neugestartet werden (geile Sache :rolleyes: ).
Normalerweise sollte man ja erst ab 2048 Threads keine weiteren mehr öffnen können.

Wir bräuchten erst einmal einen Workaround bis der (Sub)Auftragnehmer reagiert, irgendwie schert der sich um sein SLA nur sehr wenig. :rolleyes:

Tipps wären nutzbringend, würde eventuell /3GB und/oder PAE etwas bringen?
Im Server sind 4GB RAM (Taskmanager faselt etwas von 3,92GB, mist PCI-Verschnitt. :D )
 
Um welche Java-Version von welchem Hersteller handelt es sich? Was für Optionen mit welchen Werten werden als Parameter an java.exe übergeben?
Du kannst mit der -Xms Option die initiale Speichergrösse für die VM festlegen (default ist 2MB). Mit -Xss kannst du die Stacksize festlegen, der default Wert ist hier glaub ich 400k, bin mir aber nicht sicher.
Womit fliegt dir der Kram eigentlich um die Ohren, java.lang.StackOverflowError?
ciao, matthias
 
Mit java.lang.OutOfMemoryError: Can't create more Threads.
Was meiner Meinung nach bedeutet, dass der Stack voll ist.
Deine Meldung würde ja bedeuten die Stack-Größe ist zu klein.
Standard-Stacksize soll wohl 2048kB sein, werden heute mal mit 1024kB probieren.
Mehr als 1,2GB als Heap macht die Java-VM nicht mit, liegt wohl an Windows wie ich irgendwo bei Sun herauslesen konnte.
Umstieg auf andere Java-VM oder anderes Betriebssystem steht nicht zur Debatte, da die Komponenten signiert sein müssen.
 
Folgendes gilt für Windows und J2SE 1.4

Code:
-Xmsn
    Specify the initial size, in bytes, of the memory allocation pool. 
    This value must be a multiple of 1024 greater than 1MB. Append
    the letter k or K to indicate kilobytes, or m or M to indicate 
    megabytes. The default value is 2MB. Examples:

       -Xms6291456
       -Xms6144k
       -Xms6m
       

-Xmxn
    Specify the maximum size, in bytes, of the memory allocation 
    pool. This value must a multiple of 1024 greater than 2MB. 
    Append the letter k or K to indicate kilobytes, or m or M to 
    indicate megabytes. The default value is 64MB. Examples:

       -Xmx83886080
       -Xmx81920k
       -Xmx80m
       
-Xssn
    Set thread stack size.

Der Default der Stack-Size liegt bei 64 oder 128 KB.
 
roadrunner_gs schrieb:
Mit java.lang.OutOfMemoryError: Can't create more Threads.
Was meiner Meinung nach bedeutet, dass der Stack voll ist.
Sieht mir danach aus, als wäre da irgendeine Betriebssystemressource weggeplatzt. Was läuft auf dem Server für eine Betriebssystemversion? Steht irgendwas im Eventlog?
Bei solchen Problemen würde ich mal die diversen Tools von Sysinternals anschmeissen, z.B. den ProcessViewer. Da kann man z.B. etwas genauer auf die Handles usw. draufschauen.
Hast du evtl. die Möglichkeit, die Last auf mehrere Prozesse oder Rechner verteilen?
roadrunner_gs schrieb:
Umstieg auf andere Java-VM oder anderes Betriebssystem steht nicht zur Debatte, da die Komponenten signiert sein müssen.
Was meinst du denn damit?

ciao, matthias
 
Das System ist eine Fujitsu-Siemens Primergy mit 2x Intel Pentium Xeon 3.06, also schon mal vier logische CPU, 4GB RAM und Windows 2003 Enterprise Server.
Genauer draufschauen bringt es nicht, da man sonst die ganze Zeit im Serverraum hocken müsste, was wir bisher als bestes haben ist die Patrol-Überwachung von System/Threads, von daher weiß ich auch, dass ab 1700 Threads im System die Probleme anfangen.
Heute Morgen um 09:48 war es wieder so weit und ein Neustart der Anwendungsgruppe war fällig, da noch mit den alten Parametern.
Ob meine Änderungen irgendetwas gebracht haben werde ich also frühestens Morgen gegen 9 Uhr feststellen.
Als ich ging waren es aber auch schon gesamt um die 1750 Threads im System, da noch ohne Probleme.
Über Nacht werden von den Threads auch nur rund 200 abgebaut und dann wenn die Anwender am nächsten Morgen kommen und sich anmelden schnell so ab 8 Uhr die Threadanzahl wieder/weiter in die Höhe bis halt gegen Neun nichts mehr geht.

Eingesetzt werden kann nur der Windows 2003 EE Server, da für den Certificate Controller halt nur dieses Betriebssystem signiert ist.

Das ganze ist halt in einem Trustcenter das digitale Zertifikate ausstellt, verwaltet und verifiziert.

Mehr kann ich aus Geheimhaltungsgründen nicht dazu sagen. :D
 
Zurück
Oben Unten