У меня проблема с приложением, запущенным на Fedora Core 6 с JDK 1.5.0_08.Несколько потоков, вставленных в собственные вызовы (Java)
После некоторого количества времени простоя (обычно несколько дней) потоки начинают застревать в собственных методах.
Нити фиксируются в чем-то вроде этого:
"pool-2-thread-2571" prio=1 tid=0x08dd0b28 nid=0x319e waiting for monitor entry [0xb91fe000..0xb91ff7d4]
at java.lang.Class.getDeclaredConstructors0(Native Method)
или
"pool-2-thread-2547" prio=1 tid=0x75641620 nid=0x1745 waiting for monitor entry [0xbc7fe000..0xbc7ff554]
at sun.misc.Unsafe.defineClass(Native Method)
Особенно загадочным для меня это одна:
"HealthMonitor-10" daemon prio=1 tid=0x0868d1c0 nid=0x2b72 waiting for monitor entry [0xbe5ff000..0xbe5ff4d4]
at java.lang.Thread.dumpThreads(Native Method)
at java.lang.Thread.getStackTrace(Thread.java:1383)
нити не застревают до VM перезапускается.
Может ли кто-нибудь дать мне представление о том, что здесь происходит, что может быть причиной блокировки собственных методов? Диапазон адресов входа монитора в верхней части каждой застрявшей нити отличается. Как я могу понять, что держит этот монитор?
Любые предложения или рекомендации будут очень благодарны!
Спасибо, Дэвид
Если не я может доказать, что проблема вызвана ошибкой в версии JDK, которая была исправлена позже, обновление JDK не является вариантом. Завтра я попытаюсь найти исходный код - надеюсь, это может дать мне некоторое представление о проблеме. Хотя я действительно помню, что дамп потока «смешанный родной/Java», который показал собственные следы стека JDK и не мог ничего увидеть там ... Я работаю на Linux, поэтому он не похож на ошибка, с которой вы связаны. – 2014-03-01 09:08:15