WebSphere:boundedbuffer.waitGet_正在耗尽大部分CPU

时间:2012-10-28 20:01:43

标签: java websphere

我在一些WAS 7.0.0.19程序上使用了jvisualVM - 并对CPU进行了采样。它似乎有很大一部分用于boundedbuffer.waitGet _()。

你能解释这是否正常?

谢谢。

1 个答案:

答案 0 :(得分:6)

是的,这实际上是一种正常的。这些计时是由处于以下状态的线程引起的:

"Deferrable Alarm : 0" - Thread t@35
   java.lang.Thread.State: TIMED_WAITING
        at java.lang.Object.wait(Native Method)
        - waiting on <6bc66bc6> (a com.ibm.ws.util.BoundedBuffer$GetQueueLock)
        at java.lang.Object.wait(Object.java:196)
        at com.ibm.ws.util.BoundedBuffer.waitGet_(BoundedBuffer.java:187)
        - locked <6bc66bc6> (a com.ibm.ws.util.BoundedBuffer$GetQueueLock)
        at com.ibm.ws.util.BoundedBuffer.poll(BoundedBuffer.java:609)
        at com.ibm.ws.util.ThreadPool.getTask(ThreadPool.java:899)
        at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1653)

这些只是闲置的工作线程并等待新任务。它们不消耗任何CPU时间。出于某种原因,VisualVM在分析数据中包含处于此状态的线程,而不是仅忽略它们(因为它似乎与其他等待线程一样)。

如果查看VisualVM显示的数据,您可能还会注意到此状态下的线程仅对“自身时间”值有贡献,但对“自身时间(CPU)”没有影响。如果按“自我时间(CPU)”排序,实际上可以更准确地了解WebSphere进程的CPU使用情况。