【问题标题】:Stuck threads in weblogic classloader卡在 weblogic 类加载器中的线程
【发布时间】:2016-09-06 13:08:45
【问题描述】:

我们这里有超过 100 个线程卡在 weblogic (10.3.6) 托管服务器中的情况。

我正在分析一个线程转储,发现有 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 个线程等待锁定同一个锁 ,我觉得很奇怪,因为它在 classLoader 中。

我认为这不是我们现在遇到的问题的根本原因,但如果有人能解释这种行为,那可能会有很大帮助。

谢谢

编辑:

这里是阻塞线程:

    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)

对不起,我应该早点发布的。

几乎所有线程都被包含这段代码的两行代码之一阻塞或阻塞:

DatatypeFactory.newInstance().newXMLGregorianCalendar(dateDebCre)

显然,Weblogic 正在非常努力地一次又一次地加载同一个 jar。我不明白,因为它应该存储在内存中的缓存中,对吧?

首先,我们将删除这行代码,因为它们完全没用(很遗憾)。但同样,我认为理解问题会更好。

谢谢

【问题讨论】:

    标签: java weblogic classloader weblogic-10.x


    【解决方案1】:

    从线程转储看来,源代码正在尝试从 zip 文件中读取数据。如果文件的大小很大,那么它可能会导致潜在的问题 如果您在 linux 上运行,那么您可以检查 /var/proc 目录,如果该进程正在执行大量 IO

    【讨论】:

      【解决方案2】:

      首先你需要找出谁持有锁。如果可能,请附上完整的线程转储,以便我查看。

      【讨论】:

        猜你喜欢
        • 2011-01-13
        • 1970-01-01
        • 1970-01-01
        • 2020-07-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多