Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

ORB OutOfMemoryError

0 views
Skip to first unread message

Jens Kluesener

unread,
May 18, 2002, 10:48:21 AM5/18/02
to
Hi

Ich habe eine CORBA Anwendung geschrieben. Alles funktioniert soweit ganz
gut, aber nach einiger Zeit bekomme ich die Meldung:

java.lang.OutOfMemoryError: unable to create new native thread
at java.lang.Thread.start(Native Method)
at
com.sun.corba.se.internal.iiop.IIOPConnection.setConnection(IIOPConnection.j
ava:850)
...


Für jede CORBA Anfrage erstelle ich eine Instanz einer Klasse, die Thread
extends. Dies wird gestartet und am ende läuft sie aus. Das ist der Ort an
dem ORB.init(...) steht. Aber wenn der Thread beendet ist, verschwindet er
doch aus dem Speicher, oder? Woran kann das denn noch liegen?

Vielen vielen Dank

JEns


Jens Kluesener

unread,
May 18, 2002, 11:33:05 AM5/18/02
to
Hab noch etwas dazu bemerkt.

Ich habe mir alle Prozesse anzeigen lasse (mit top). Es sind 85 Prozesse, 84
sleeping. Wenn ich das Programm starte sind es 98 und 97 sleeping. Das hält
sich ja noch in Grenzen. Aber sobald ich die erste Berechnung ablaufen lasse
sind es am ende der ersten Berechnung genau 291 und 290 sleeping. Das deutet
doch darauf hin, daß die Threads nicht beendet haben, oder kann das an
irgendeiner ORB Geschichte liegen?

Vielen Dank

Jens


"Jens Kluesener" <j.klu...@web.de> schrieb im Newsbeitrag
news:ac5q7t$mhh5f$1...@ID-96717.news.dfncis.de...

Manfred Reinart

unread,
May 19, 2002, 5:05:41 AM5/19/02
to
Hi Jens,

IMHO ist das eine ziemlich teure Lösung für jeden remote request
einen neune Thread zu erzeugen und in diesem auch noch ORB.init aufzurufen.

Zumindest die ORB-Initialisierung sollte nur einmal erfolgen.

Ansonsten ist ws. comp.lang.java.corba bzw. cop.object.corba eine beserer
Ort für derartige Fragen.

Gruß
Manfred

"Jens Kluesener" <j.klu...@web.de> schrieb im Newsbeitrag

news:ac5sub$mtqar$1...@ID-96717.news.dfncis.de...

Jens Kluesener

unread,
May 19, 2002, 8:24:39 AM5/19/02
to
Hi

"Manfred Reinart" <m...@ooc.de> schrieb im Newsbeitrag
news:ac7pt0$nakso$1...@ID-31703.news.dfncis.de...


> Hi Jens,
>
> IMHO ist das eine ziemlich teure Lösung für jeden remote request
> einen neune Thread zu erzeugen und in diesem auch noch ORB.init
aufzurufen.
>
> Zumindest die ORB-Initialisierung sollte nur einmal erfolgen.
>

Wie kann ich denn den durch die Initialisierung verbebenen Speicherplatz
wieder freigeben, bezogen auf die ganze ORB Geschichte? Was genau braucht
denn so viel Speicher?

Vielen Dank

Jens

Matthias Ernst

unread,
May 19, 2002, 10:09:18 AM5/19/02
to
"Jens Kluesener" <j.klu...@web.de> wrote in message news:<ac5sub$mtqar$1...@ID-96717.news.dfncis.de>...

> Aber sobald ich die erste Berechnung ablaufen lasse
> sind es am ende der ersten Berechnung genau 291 und 290 sleeping. Das deutet
> doch darauf hin, daß die Threads nicht beendet haben, oder kann das an
> irgendeiner ORB Geschichte liegen?

OutOfMemory kommt auch, wenn zu viele Threads laufen --- es kann dann
kein zusammenhaengender Bereich fuer den Stack gefunden werden.

Schick doch mal ein QUIT-Signal an Deine VM. Wenn sie im Vordergrund
laeuft, reicht es, in der Shell ^-\ (Control-Backslash) zu druecken;
alternativ 'kill -QUIT <pid>'. Die VM gibt Dir dann die Stacks aller
laufenden Threads aus, und Du kannst sehen, ob Deine noch am Start
sind.

Matthias

0 new messages