0

有一个 web 服务客户端使用 ehcache 来缓存一些结果并避免过多的 ws 调用。

显然,调用这个ws客户端的服务器(在Weblogic OSB上)只是挂起,甚至没有在日志中写任何东西......只是冻结!只要有一点流量就可以了。

完整的线程转储在这里:

http://pastebin.com/rdVyxjNc

下面是我不太清楚停车等待 <0x8a03c9c0>

但我无法在线程转储中找到对 0x8a03c9c0 的任何引用。

您是否在线程转储中看到任何可能导致此服务器冻结的内容?

谢谢

searchByTemplate.data" prio=3 tid=0x0115b400 nid=0x5e waiting on condition [0x5ef7f000..0x5ef7fbf0]
   java.lang.Thread.State: TIMED_WAITING (parking)
        at sun.misc.Unsafe.park(Native Method)
        - parking to wait for  <0x8a03c9c0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
        at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:198)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:1963)
        at java.util.concurrent.DelayQueue.take(DelayQueue.java:164)
        ...
4

1 回答 1

2

您突出显示的线程实际上“可用于”处理请求,因此不是问题。Weblogic Oracle Service Bus 依赖 XQuery 进行 XML 操作。众所周知,XQuery 在处理大数据负载时会占用大量 CPU 和内存。

我刚刚分析了您的线程转储。线程转储清楚地显示了高 CPU 模式,其中多个线程正在执行任务,例如解析 XML 并尝试在某些数据结构(例如 ArrayList 等)中分配内存。

我怀疑“挂起”问题的根源有两种可能的情况:

过多的垃圾收集和 OldGen 空间耗尽

HotSpot JVM 1.6+ 在底部包含 Java 堆利用率。我们可以看到 OldGen 空间在 92%。这重新强化了我们从线程转储中看到的线程模式。

  1. PSYoungGen 总计 466944K,已使用 233472K [0xd1000000, 0xfbc00000, 0xfbc00000)
  2. 伊甸园空间 233472K, 100% 已使用 [0xd1000000,0xdf400000,0xdf400000)
  3. 从空间 233472K,使用 0% [0xed800000,0xed800000,0xfbc00000)
  4. 到空间 233472K,使用 0% [0xdf400000,0xdf400000,0xed800000)
  5. ParOldGen 总计 1400832K,已使用 1297110K [0x7b800000, 0xd1000000, 0xd1000000)
  6. 对象空间 1400832K,已使用92% [0x7b800000,0xcaab5ac8,0xd1000000)
  7. PSPermGen 总计 262144K,已使用 167570K [0x6b800000, 0x7b800000, 0x7b800000)
  8. 对象空间 262144K,已使用 63% [0x6b800000,0x75ba4ab0,0x7b800000)

消耗 CPU 和/或 Java 堆内存的罪魁祸首线程

在这种情况下,一个或几个线程可能会参与不间断的处理,例如不返回的 XQuery 等,从而导致 CPU 激增和 JVM 争用。

现在在下面找到我的建议:

  • 启用详细:gc。这将允许您沿着垃圾收集频率执行 Java 堆的运行状况和足迹评估
  • 下次看到问题时执行每个线程的 CPU% 分析。这将允许您确定您是否正在处理消耗 CPU 和/或 Java 堆内存的特定服务总线请求

从我的博客中查找以下文章,以帮助您在下一个分析阶段:

详细的 GC 分析

JVM 详细 GC 教程

Java高CPU故障排除

Java 高 CPU 故障排除

问候, PH

于 2012-12-15T02:02:35.070 回答