java - weblogic 集群环境中的线程被阻塞

标签 java multithreading weblogic

我有一个带有 2 个服务器实例的 weblogic 集群环境。其中一台挂了,另一台工作得很好。分析线程转储后,我可以看到几乎 90% 的线程都被阻止,并且在跟踪线程之后,它出现在堆栈跟踪下方。

"[ACTIVE] ExecuteThread: '330' for queue: 'weblogic.kernel.Default (self-tuning)'" daemon prio=10 tid=0x00007f9494376000 nid=0x66a2 runnable [0x00007f944bb78000]
   java.lang.Thread.State: RUNNABLE
    at java.io.UnixFileSystem.getBooleanAttributes0(Native Method)
    at java.io.UnixFileSystem.getBooleanAttributes(UnixFileSystem.java:242)
    at java.io.File.exists(File.java:813)
    at sun.misc.URLClassPath$FileLoader.getResource(URLClassPath.java:1080)
    at sun.misc.URLClassPath.getResource(URLClassPath.java:199)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:358)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)

请在下面找到BLOCKED 线程的线程转储。

"[ACTIVE] ExecuteThread: '298' for queue: 'weblogic.kernel.Default (self-tuning)'" daemon prio=10 tid=0x00007f9494352000 nid=0x6276 waiting for monitor entry [0x00007f944e09e000]
   java.lang.Thread.State: BLOCKED (on object monitor)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:405)
    - waiting to lock <0x0000000719e7ded8> (a weblogic.utils.classloaders.GenericClassLoader)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at weblogic.utils.classloaders.GenericClassLoader.loadClass(GenericClassLoader.java:179)
    at ch.qos.logback.classic.spi.PackagingDataCalculator.loadClass(PackagingDataCalculator.java:207)
    at ch.qos.logback.classic.spi.PackagingDataCalculator.bestEffortLoadClass(PackagingDataCalculator.java:232)
    at ch.qos.logback.classic.spi.PackagingDataCalculator.computeBySTEP(PackagingDataCalculator.java:138)
    at ch.qos.logback.classic.spi.PackagingDataCalculator.populateUncommonFrames(PackagingDataCalculator.java:113)
    at ch.qos.logback.classic.spi.PackagingDataCalculator.populateFrames(PackagingDataCalculator.java:105)
    at ch.qos.logback.classic.spi.PackagingDataCalculator.calculate(PackagingDataCalculator.java:57)
    at ch.qos.logback.classic.spi.ThrowableProxy.calculatePackagingData(ThrowableProxy.java:147)
    at ch.qos.logback.classic.spi.LoggingEvent. (LoggingEvent.java:124)
    at ch.qos.logback.classic.Logger.buildLoggingEventAndAppend(Logger.java:440)
    at ch.qos.logback.classic.Logger.filterAndLog_0_Or3Plus(Logger.java:396)
    at ch.qos.logback.classic.Logger.warn(Logger.java:713)

此堆栈跟踪对于所有其他 BLOCKED 线程也类似。

如果有人遇到过这样的问题,请告诉我。任何帮助深表感谢。

最佳答案

线程转储表明您的线程在尝试写入日志消息时被阻塞。 Logback 需要一些类并要求类加载器加载它。在类加载器层次结构的某个位置,其中一个类加载器在加载库时被卡住,并导致所有其他线程挂起等待该加载器。

最有可能的是,您的依赖库放置在已安装的网络磁盘上,该磁盘无法访问或速度极慢或存在一些坏 block 。它会导致阅读该库时停滞不前。检查您的类路径、磁盘和网络。

关于java - weblogic 集群环境中的线程被阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39219571/

相关文章:

java - 将对象从 View 传递到 Controller 或从 Controller 传递到 Controller

java - 在 C++ 中正确表示 Java 的 ArrayList<Object>

C多线程嵌套for循环-超参数网格搜索的组合爆炸问题

java - 在使用它之前,必须配置该插件。请从系统配置中执行此操作

java - 使用 Java 检测互联网连接

java - 如果我已经有泛型实现,如何声明接口(interface)方法

c - 运行多个并发 GMainLoops

python - python进程/线程映射在Windows中如何工作?为什么线程比进程运行得更快?

java - Ant Build - 找不到taskdef

linux - Oracle Reports 11g - Oracle WebLogic - 报告字体