[jacorb-developer] java.lang.OutOfMemoryError silently caught by JacORB

Pierskalla, Eric Eric.Pierskalla at datalogic.com
Mon Jan 27 15:13:00 CET 2014


Nick,
I do not have simple test case yet that I can supply, that would take a bit of work.  The client is a fairly large java application that uses JacORB, the server is a fairly large C++ application that uses OmniOrb.  I would need to create something that duplicates this particular situation, asking for a large sized piece of data.
It seems that the problem is that somewhere there is a:
catch (Throwable t)
that is swallowing the OOM, things do not crash, eventually a CORBA.TIMEOUT occurs, but the user of the application does not know why the timeout occurred.
Regards,
Eric



-----Original Message-----
From: jacorb-developer-bounces~eric.pierskalla=datalogic.com at lists.spline.inf.fu-berlin.de [mailto:jacorb-developer-bounces~eric.pierskalla=datalogic.com at lists.spline.inf.fu-berlin.de] On Behalf Of Nick Cross
Sent: Monday, January 27, 2014 6:38 AM
To: Discussions concerning CORBA development with JacORB
Subject: Re: [jacorb-developer] java.lang.OutOfMemoryError silently caught by JacORB


Are you able to provide a test case? I think the problem here is isolating OOM from the JVM and being able to recover and transmit the error to the client.

Regards

Nick

On 27/01/14 12:12, Pierskalla, Eric wrote:
> I have an application where occasionally large data items are transferred.  Approximately 20-30 MB.  With a JRE setting of -Xmx 400M, JacORB will raise and silently catch, an OutOfMemoryError.  Some time later a CORBA timeout is thrown, so that the user knows something went wrong, but since the uncaught exception handler in the application did not catch the initial error, we do not automatically know to instruct the user to increase the -Xmx setting, which corrects the problem.
> I looked through the orb.properties file for a setting that may affect this, but found none.
> A verbose output dump follows.
> Any recommendations?
>
> 2014-01-27 05:52:51.560 FINE  [10]  GIOPConnection.sendMessage timeout 
> (millis): 0
> 2014-01-27 05:52:51.561 FINE  [10]  wrote 92 bytes to 127.0.0.1:10011
> 2014-01-27 05:52:51.561 FINE  [10]  wrote GIOP message of size 92 to 
> ClientGIOPConnection to 127.0.0.1:10011
> (4370010d)
> 2014-01-27 05:52:51.654 FINE  [15]  read 12 bytes from 127.0.0.1:10011
> 2014-01-27 05:52:51.674 FINE  [15]  read 15139900 bytes from 
> 127.0.0.1:10011
> 2014-01-27 05:52:51.674 FINE  [15]  read GIOP message of size 15139912 
> from ClientGIOPConnection to
> 127.0.0.1:10011 (4370010d)
> 2014-01-27 05:52:51.678 FINE  [15]  read 12 bytes from 127.0.0.1:10011
> 2014-01-27 05:52:51.700 FINE  [15]  read 15137292 bytes from 
> 127.0.0.1:10011
> 2014-01-27 05:52:51.700 FINE  [15]  read GIOP message of size 15137304 
> from ClientGIOPConnection to
> 127.0.0.1:10011 (4370010d)
> 2014-01-27 05:52:51.777 FINE  [15]  read 12 bytes from 127.0.0.1:10011
> 2014-01-27 05:52:51.777 FINE  [15]  read 68 bytes from 127.0.0.1:10011
> 2014-01-27 05:52:51.777 FINE  [15]  read GIOP message of size 80 from 
> ClientGIOPConnection to 127.0.0.1:10011
> (4370010d)
> Exception in thread "ClientMessageReceptor0" java.lang.OutOfMemoryError: Java heap space
>                  at java.util.Arrays.copyOf(Arrays.java:2786)
>                  at java.io.ByteArrayOutputStream.toByteArray(ByteArrayOutputStream.java:133)
>                  at org.jacorb.orb.giop.GIOPConnection.receiveMessagesLoop(GIOPConnection.java:654)
>                  at org.jacorb.orb.giop.GIOPConnection.receiveMessages(GIOPConnection.java:527)
>                  at org.jacorb.orb.giop.MessageReceptor.doWork(MessageReceptor.java:69)
>                  at org.jacorb.util.threadpool.ConsumerTie.run(ConsumerTie.java:60)
>                  at java.lang.Thread.run(Thread.java:662)
> 2014-01-27 05:53:01.562 FINE  [10]  invoke[<--]: SystemException
> org.omg.CORBA.TIMEOUT: client timeout reached
>                  at org.jacorb.orb.giop.ReplyPlaceholder.getInputStream(ReplyPlaceholder.java:134)
>                  at org.jacorb.orb.ReplyReceiver.getReply(ReplyReceiver.java:386)
>                  at org.jacorb.orb.Delegate._invoke_internal(Delegate.java:1419)
>                  at org.jacorb.orb.Delegate.invoke_internal(Delegate.java:1188)
>                  at org.jacorb.orb.Delegate.invoke(Delegate.java:1176)
>                  at org.omg.CORBA.portable.ObjectImpl._invoke(ObjectImpl.java:80)
>                  at vdm._IToolStub.GetData(_IToolStub.java:2955)
>                  at vdcomm.VdmObject.getColorImageListData(VdmObject.java:3650)
>                  at vdcomm.VdmObject.getBaseData(VdmObject.java:926)
>                  at vdi.Runnable1.getPortValue(Runnable1.java:499)
>                  at vdi.Port1.refreshValue(Port1.java:403)
>                  at vdi.Port1.refresh(Port1.java:361)
>                  at vdi.Port1$Reference.refresh(Port1.java:551)
>                  at vdi.VDICache.refresh(VDICache.java:328)
>                  at vdi.VDICache.refresh(VDICache.java:335)
>                  at vdi.VDICache.refreshTree(VDICache.java:154)
>                  at vdi.Runnable1.refreshRunnableAndPorts(Runnable1.java:199)
>                  at vpm.TasksTabbedPane.advanceTask(TasksTabbedPane.java:4159)
>                  at vpm.TasksTabbedPane.access$8000(TasksTabbedPane.java:125)
>                  at vpm.TasksTabbedPane$TaskAdvanceAction_.actionPerformed(TasksTabbedPane.java:5171)
>                  at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
>                  at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
>                  at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
>                  at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
>                  at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
>                  at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:273)
>                  at java.awt.Component.processMouseEvent(Component.java:6288)
>                  at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
>                  at java.awt.Component.processEvent(Component.java:6053)
>                  at java.awt.Container.processEvent(Container.java:2041)
>                  at java.awt.Component.dispatchEventImpl(Component.java:4651)
>                  at java.awt.Container.dispatchEventImpl(Container.java:2099)
>                  at java.awt.Component.dispatchEvent(Component.java:4481)
>                  at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
>                  at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
>                  at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
>                  at java.awt.Container.dispatchEventImpl(Container.java:2085)
>                  at java.awt.Window.dispatchEventImpl(Window.java:2478)
>                  at java.awt.Component.dispatchEvent(Component.java:4481)
>                  at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:643)
>                  at java.awt.EventQueue.access$000(EventQueue.java:84)
>                  at java.awt.EventQueue$1.run(EventQueue.java:602)
>                  at java.awt.EventQueue$1.run(EventQueue.java:600)
>                  at java.security.AccessController.doPrivileged(Native Method)
>                  at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
>                  at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
>                  at java.awt.EventQueue$2.run(EventQueue.java:616)
>                  at java.awt.EventQueue$2.run(EventQueue.java:614)
>                  at java.security.AccessController.doPrivileged(Native Method)
>                  at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
>                  at java.awt.EventQueue.dispatchEvent(EventQueue.java:613)
>                  at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
>                  at 
> java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.j
> ava:184)
> CORBA.TIMEOUT exception thrown.
>
>
>
> CONFIDENTIALITY NOTICE. This message is for the sole use of the intended recipient(s) and may contain confidential and/or privileged information. Any unauthorized review, use, disclosure, or distribution is prohibited.  If you are not the intended recipient, please destroy all copies of the original message, including any and all attachments, and notify the sender immediately.
>
> _______________________________________________
> jacorb-developer maillist  -  
> jacorb-developer at lists.spline.inf.fu-berlin.de
> https://lists.spline.inf.fu-berlin.de/mailman/listinfo/jacorb-develope
> r
>

_______________________________________________
jacorb-developer maillist  -  jacorb-developer at lists.spline.inf.fu-berlin.de
https://lists.spline.inf.fu-berlin.de/mailman/listinfo/jacorb-developer


CONFIDENTIALITY NOTICE. This message is for the sole use of the intended recipient(s) and may contain confidential and/or privileged information. Any unauthorized review, use, disclosure, or distribution is prohibited.  If you are not the intended recipient, please destroy all copies of the original message, including any and all attachments, and notify the sender immediately.




More information about the jacorb-developer mailing list