2016-09-06 2 views
2

У нас есть ситуация, когда более 100 потоков застряли в управляемом сервере weblogic (10.3.6).Закрепленные темы в weblogic classloader

Я анализ threaddump и найти 150 тему, заблокированные ожидания на замке в загрузчике классов, как: "jmsContainer-14" prio=10 tid=0x00007f11485d7000 nid=0x14c8 waiting for monitor entry [0x00007f1023590000] java.lang.Thread.State: BLOCKED (on object monitor) at weblogic.utils.classloaders.ChangeAwareClassLoader.loadClass(ChangeAwareClassLoader.java:48) - waiting to lock <0x0000000782aeb288> (a weblogic.utils.classloaders.ChangeAwareClassLoader) at ch.qos.logback.classic.spi.PackagingDataCalculator.loadClass(PackagingDataCalculator.java:207)

(10 вхождений)

или

"[STUCK] ExecuteThread: '30' for queue: 'weblogic.kernel.Default (self-tuning)'" daemon prio=10 tid=0x00007f10d002d800 nid=0x5ea5 waiting for monitor entry [0x00007f1136eeb000] java.lang.Thread.State: BLOCKED (on object monitor) at weblogic.utils.classloaders.ChangeAwareClassLoader.loadClass(ChangeAwareClassLoader.java:48) - waiting to lock <0x0000000782aeb288> (a weblogic.utils.classloaders.ChangeAwareClassLoader) at javax.xml.datatype.FactoryFinder.getProviderClass(FactoryFinder.java:115) at javax.xml.datatype.FactoryFinder.newInstance(FactoryFinder.java:181)

(137) вхождения

Не все застрявшие нити заблокированы для по той же причине, но у нас есть 150 потоков, ожидающих блокировки того же замка. < 0x0000000782aeb288>, который я нахожу странным, потому что он находится в classLoader.

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

Благодаря

EDIT:

Вот блокирующая нить:

ExecuteThread '136' for queue: 'weblogic.kernel.Default (self-tuning)'" daemon prio=10 tid=0x00007f11484af800 nid=0x7640 runnable [0x00007f102c11b000] 
    java.lang.Thread.State: RUNNABLE 
    at sun.nio.cs.UTF_8$Encoder.encode(UTF_8.java:632) 
    at java.util.zip.ZipCoder.getBytes(ZipCoder.java:86) 
    at java.util.zip.ZipFile.getEntry(ZipFile.java:306) 
    - locked <0x0000000782b2ddf8> (a java.util.jar.JarFile) 
    at java.util.jar.JarFile.getEntry(JarFile.java:226) 
    at weblogic.utils.classloaders.ZipClassFinder.getSource(ZipClassFinder.java:39) 
    at weblogic.utils.classloaders.JarClassFinder.getSource(JarClassFinder.java:50) 
    at weblogic.utils.classloaders.AbstractClassFinder.getClassSource(AbstractClassFinder.java:31) 
    at weblogic.utils.classloaders.MultiClassFinder.getClassSource(MultiClassFinder.java:58) 
    at weblogic.utils.classloaders.MultiClassFinder.getClassSource(MultiClassFinder.java:58) 
    at weblogic.utils.classloaders.MultiClassFinder.getClassSource(MultiClassFinder.java:58) 
    at weblogic.utils.classloaders.MultiClassFinder.getClassSource(MultiClassFinder.java:58) 
    at weblogic.application.utils.CompositeWebAppFinder.getClassSource(CompositeWebAppFinder.java:88) 
    at weblogic.utils.classloaders.MultiClassFinder.getClassSource(MultiClassFinder.java:58) 
    at weblogic.utils.classloaders.MultiClassFinder.getClassSource(MultiClassFinder.java:58) 
    at weblogic.utils.classloaders.CodeGenClassFinder.getClassSource(CodeGenClassFinder.java:25) 
    at weblogic.utils.classloaders.GenericClassLoader.findLocalClass(GenericClassLoader.java:291) 
    - eliminated <0x0000000782aeb288> (a weblogic.utils.classloaders.ChangeAwareClassLoader) 
    at weblogic.utils.classloaders.GenericClassLoader.findClass(GenericClassLoader.java:270) 
    at weblogic.utils.classloaders.ChangeAwareClassLoader.findClass(ChangeAwareClassLoader.java:64) 
    at weblogic.utils.classloaders.ChangeAwareClassLoader.loadClass(ChangeAwareClassLoader.java:49) 
    - locked <0x0000000782aeb288> (a weblogic.utils.classloaders.ChangeAwareClassLoader) 
    at javax.xml.datatype.FactoryFinder.getProviderClass(FactoryFinder.java:115) 
    at javax.xml.datatype.FactoryFinder.newInstance(FactoryFinder.java:181) 

извините, я отправил это раньше.

Почти все потоки bloked в или блокированы одной из двух строк кода, содержащих этот кусок кода:

DatatypeFactory.newInstance().newXMLGregorianCalendar(dateDebCre)

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

Во-первых, мы удалим эти строки кода, поскольку они абсолютно бесполезны (это позор). Но опять же, я думаю, что понимание проблемы было бы лучше.

Спасибо

ответ

0

Сначала вам нужно выяснить, кто держит замок < 0x0000000782aeb288>. Если возможно, приложите полный дамп потока, чтобы я мог посмотреть.

0

Из дампа потока это также выглядит как исходный код пытается прочитать данные из zip-файла. Если размер файлов огромен, то это может привести к потенциальной проблеме. Если вы работаете в Linux, вы можете зарегистрироваться в каталоге/var/proc, если процесс выполняет много IO

Смежные вопросы