Java 6 JVM Hang

Извиняюсь за длинный пост, но мне интересно, могу ли я получить больше глазных яблок, прежде чем я отправлю отчет об ошибке в Sun.

JVM: 6u11
O / S: Windows XP SP3
Аппаратное обеспечение: AMD Athlon 64 X2 4600+ @ 2,41 ГГц, с 3,25 ГБ оперативной памяти.

Я считаю, что столкнулся с ошибкой в ​​JVM, где нить не получает монитор. В следующих streamа монитор был приобретен RelayedMessages-0000000001 , который оказался на нем ожидающим; эта нить впоследствии была уведомлена. Однако, несмотря на то, что все перечисленные темы конкурируют за монитор, никто не получает его.

Я обещаю, что дамп streamа завершен для каждого streamа, который относится к монитору . Дамп был получен с использованием Java VisualVM, три раза в течение 16 часов и показывался как последовательный каждый раз (эти streamи не изменялись).

Кто-то не согласен с моей оценкой того, что JVM не может доставить монитор к любой из подходящих streamов, когда он должен доставить его одному из них?

 "RelayedMessages-0000000001" daemon prio=6 tid=0x03694400 nid=0x1750 waiting for monitor entry [0x05e1f000..0x05e1fc94] java.lang.Thread.State: BLOCKED (on object monitor) at java.lang.Object.wait(Native Method) at com.companyremoved.thd.EzWaiter.ezWait(EzWaiter.java:249) - locked  (a com.companyremoved.system.coms.ComsSender) at com.companyremoved.ioc.IsolatedObject.waitWithinMessage(IsolatedObject.java:352) - locked  (a com.companyremoved.system.coms.ComsSender) at com.companyremoved.system.coms.ComsSender.waitForAvailablePipe(ComsSender.java:219) at com.companyremoved.system.coms.ComsSender.sendObject(ComsSender.java:185) at com.companyremoved.system.coms.ComsSender.processIocMessage(ComsSender.java:98) at com.companyremoved.ioc.IsolatedObject.deliver(IsolatedObject.java:311) - locked  (a com.companyremoved.system.coms.ComsSender) at com.companyremoved.ioc.IsolatedObject.iocMessage(IsolatedObject.java:265) at com.companyremoved.ioc.IocTarget.iocMessage(IocTarget.java:138) at com.companyremoved.ioc.IocBinding.iocMessage(IocBinding.java:105) at com.companyremoved.system.coms.ComsSender$Messages.sendObject(ComsSender.java:333) at com.companyremoved.system.coms.ComsSender$Messages.sendObject(ComsSender.java:316) at com.companyremoved.system.coms.RelayedMessage.run(RelayedMessage.java:104) - locked  (a com.companyremoved.system.coms.RelayedMessage) at com.companyremoved.thd.RunQueue.runEntry(RunQueue.java:293) at com.companyremoved.thd.RunQueue.run(RunQueue.java:273) at java.lang.Thread.run(Unknown Source) Locked ownable synchronizers: - None "ScbPipe Writer" daemon prio=6 tid=0x4fff0c00 nid=0xf14 waiting for monitor entry [0x0594f000..0x0594fc14] java.lang.Thread.State: BLOCKED (on object monitor) at com.companyremoved.ioc.IsolatedObject.deliver(IsolatedObject.java:293) - waiting to lock  (a com.companyremoved.system.coms.ComsSender) at com.companyremoved.ioc.IsolatedObject.iocMessage(IsolatedObject.java:265) at com.companyremoved.ioc.IocTarget.iocMessage(IocTarget.java:138) at com.companyremoved.coms.stm.ioc.ComsPipe$Receiver.scbPipeDefaultProcessor(ComsPipe.java:403) at com.companyremoved.scb.ScbPipe.processObject(ScbPipe.java:915) - locked  (a java.lang.Object) at com.companyremoved.scb.ScbPipe.writerRun(ScbPipe.java:817) at com.companyremoved.scb.ScbPipe.run(ScbPipe.java:728) at java.lang.Thread.run(Unknown Source) Locked ownable synchronizers: - None "ScbPipe Writer" daemon prio=6 tid=0x4c647400 nid=0xe00 waiting for monitor entry [0x059ef000..0x059efb94] java.lang.Thread.State: BLOCKED (on object monitor) at com.companyremoved.ioc.IsolatedObject.deliver(IsolatedObject.java:293) - waiting to lock  (a com.companyremoved.system.coms.ComsSender) at com.companyremoved.ioc.IsolatedObject.iocMessage(IsolatedObject.java:265) at com.companyremoved.ioc.IocTarget.iocMessage(IocTarget.java:138) at com.companyremoved.coms.stm.ioc.ComsPipe$Receiver.scbPipeDefaultProcessor(ComsPipe.java:403) at com.companyremoved.scb.ScbPipe.processObject(ScbPipe.java:915) - locked  (a java.lang.Object) at com.companyremoved.scb.ScbPipe.writerRun(ScbPipe.java:817) at com.companyremoved.scb.ScbPipe.run(ScbPipe.java:728) at java.lang.Thread.run(Unknown Source) Locked ownable synchronizers: - None "ScbPipe Writer" daemon prio=6 tid=0x035f7800 nid=0x1130 waiting for monitor entry [0x0726f000..0x0726fc94] java.lang.Thread.State: BLOCKED (on object monitor) at com.companyremoved.ioc.IsolatedObject.deliver(IsolatedObject.java:293) - waiting to lock  (a com.companyremoved.system.coms.ComsSender) at com.companyremoved.ioc.IsolatedObject.iocMessage(IsolatedObject.java:265) at com.companyremoved.ioc.IocTarget.iocMessage(IocTarget.java:138) at com.companyremoved.coms.stm.ioc.ComsPipe$Receiver.scbPipeDefaultProcessor(ComsPipe.java:403) at com.companyremoved.scb.ScbPipe.processObject(ScbPipe.java:915) - locked  (a java.lang.Object) at com.companyremoved.scb.ScbPipe.writerRun(ScbPipe.java:817) at com.companyremoved.scb.ScbPipe.run(ScbPipe.java:728) at java.lang.Thread.run(Unknown Source) Locked ownable synchronizers: - None "IOC Signals-0000000001" daemon prio=6 tid=0x03673000 nid=0x1434 waiting for monitor entry [0x0415f000..0x0415fd94] java.lang.Thread.State: BLOCKED (on object monitor) at com.companyremoved.ioc.IsolatedObject.deliver(IsolatedObject.java:293) - waiting to lock  (a com.companyremoved.system.coms.ComsSender) at com.companyremoved.ioc.IsolatedObject.iocMessage(IsolatedObject.java:265) at com.companyremoved.ioc.IocTarget.iocMessage(IocTarget.java:138) at com.companyremoved.ioc.IocBinding.iocMessage(IocBinding.java:105) at com.companyremoved.system.coms.ComsSender$Messages.removePipe(ComsSender.java:302) at com.companyremoved.system.coms.ConnectionController.disconnect(ConnectionController.java:712) at com.companyremoved.system.coms.ConnectionController.shutdown(ConnectionController.java:224) at com.companyremoved.system.coms.ConnectionController.processIocMessage(ConnectionController.java:168) at com.companyremoved.ioc.IsolatedObject.deliver(IsolatedObject.java:311) - locked  (a com.companyremoved.system.coms.ConnectionController) at com.companyremoved.ioc.IsolatedObject.access$100(IsolatedObject.java:36) at com.companyremoved.ioc.IsolatedObject$SignalProxy.run(IsolatedObject.java:526) at com.companyremoved.thd.RunQueue.runEntry(RunQueue.java:293) at com.companyremoved.thd.RunQueue.run(RunQueue.java:273) at java.lang.Thread.run(Unknown Source) Locked ownable synchronizers: - None 

Предоставленная трассировка streamа завершена в отношении рассматриваемого замка. Два других человека, с которыми я работаю, согласны с тем, что явная ошибка JVM, как и программисты jProfiler (ej-technologies).

Вы уверены, что stream RelayedMessages-0000000001 получит уведомление? Это нормально, когда другие streamи блокируются, поскольку первый stream по-прежнему получает блокировку для <0x12a8f9f8>. Чтобы другие streamи могли получить блокировку, первый stream должен быть удален из списка ожидания и запланирован для повторного запуска, а затем отпустите блокировку, которую он получил.

Возможно, есть другие streamи, ожидающие того же объекта, который ждет первый stream, и когда вы сообщаете, что эти streamи выбраны для пробуждения. Если это возможно, обязательно используйте notifyAll ().

Также может быть, вы можете освободить блокировку перед тем, как поместить stream в список ожидания или вызвать wait, указав значение тайм-аута. не имеет смысла, что stream находится в списке ожидания в течение 16 часов. Если вы также можете опубликовать другие темы, которые также будут полезны.

Обновить:

Вы правы, я должен был принять во внимание Thread.State. Как вы прокомментировали, он не находится в состоянии ожидания, так как он был уведомлен. Быть в списке ожидания не является причиной не освобождения блокировки <0x12a8f9f8>. Однако он находится в заблокированном состоянии. Это означает, что он пытается получить блокировку, которую он приобрел до объекта. Подождите, но это невозможно. Таким образом, кажется, что есть еще один stream (не в списке, который вы предоставили), блокируя его.

Думаю, вы думаете, что object.wait должен был освободить блокировку <0x12a8f9f8>. Но object.wait только освобождает блокировку на этом объектном мониторе и сохраняет другие блокировки. И я думаю, lock <0x12a8f9f8> не является блокировкой для монитора объекта (для которого вызывается ожидание)

Конечно, это не так, и может быть действительно ошибка. Я просто пытаюсь найти возможные причины.