Наше приложение отстает.Java thread dump, не могу найти поток, который блокирует другие
Я получаю дамп резьбы, используя jstack
util.
Я делаю подготовку данных и сортирую их. И это то, что у меня есть:
198 java.lang.Thread.State: BLOCKED (on object monitor)
198 - waiting to lock <0x0000000582e56bc8> (a java.lang.Class for com.sun.xml.bind.v2.runtime.reflect.opt.AccessorInjector)
198 ниток BLOCKED.
Как я понимаю из waiting to lock <0x0000000582e56bc8>
, все они ждут некоторую тему с ID 0x0000000582e56bc8
. Странно то, что я не могу найти этот 0x0000000582e56bc8
в выводе дампа потока, я не могу найти то, что все ждут.
Или это неправда? Что это такое 0x0000000582e56bc8
?
Вот маленький мир отвала:
"http-thread-pool-8080(790)" daemon prio=3 tid=0x00000001100fa000 nid=0x339a waiting for monitor entry [0xfffffffeec1f6000]
java.lang.Thread.State: BLOCKED (on object monitor)
at com.sun.xml.bind.v2.runtime.reflect.opt.AccessorInjector.prepare(AccessorInjector.java:82)
- waiting to lock <0x0000000582e56bc8> (a java.lang.Class for com.sun.xml.bind.v2.runtime.reflect.opt.AccessorInjector)
Все 198 других резьбовыми отвалов являются одинаковыми
Update 1. После того, как @Holder комментарий
"http-thread-pool-8080(642)" daemon prio=3 tid=0x0000000110a8c800 nid=0x32ec runnable [0xffffffff05af5000]
java.lang.Thread.State: RUNNABLE
at java.util.zip.Inflater.inflateBytes(Native Method)
at java.util.zip.Inflater.inflate(Inflater.java:256)
- locked <0x000000058f2af0c0> (a java.util.zip.ZStreamRef)
at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:152)
at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:122)
at org.apache.felix.framework.util.WeakZipFileFactory$WeakZipFile$WeakZipInputStream.read(WeakZipFileFactory.java:669)
at java.io.DataInputStream.readShort(DataInputStream.java:312)
at com.sun.xml.bind.v2.bytecode.ClassTailor.tailor(ClassTailor.java:173)
at com.sun.xml.bind.v2.runtime.reflect.opt.AccessorInjector.tailor(AccessorInjector.java:126)
at com.sun.xml.bind.v2.runtime.reflect.opt.AccessorInjector.prepare(AccessorInjector.java:85)
- locked <0x0000000582e56bc8> (a java.lang.Class for com.sun.xml.bind.v2.runtime.reflect.opt.AccessorInjector)
at com.sun.xml.bind.v2.runtime.reflect.opt.OptimizedAccessorFactory.get(OptimizedAccessorFactory.java:176)
Update 2 Спасибо за @Holder
Как я понимаю waiting to lock <0x0000000582e56bc8>
, означает, что поток ожидает 0x0000000582e56bc8
, что является указателем. Затем вы должны найти - locked <0x0000000582e56bc8>
. И вы найдете Thread, который заблокировал объект. Затем я посмотрел на трассировку стека и, наконец, нашел преступника.
Если у вас есть проблемы с com.sun.xml.bind.v2.runtime.reflect.opt.AccessorInjector
, посмотрите на this question.
'0x0000000582e56bc8' - это объект, а не нить. –
Как указал Dhrubajyoti Gogoi, «0x0000000582e56bc8» - это объект. Теперь обратите внимание на запись '- locked <0x0000000582e56bc8>' в трассировке стека, чтобы узнать, какой поток имеет блокировку для этого объекта. – Holger
@ Хольджер. Я нашел только одну запись. Обновленный вопрос. Это означает, что Thread с 'tid = 0x0000000110a8c800 nid = 0x32ec' блокирует все остальные Thread? – c0rp