2

I used jvisualVM on some WAS 7.0.0.19 programs - and sampled the CPU. It appears that a huge chunk of it goes to boundedbuffer.waitGet_().

Can you explain if this is normal?

Thank you.

4

1 回答 1

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 使用情况。

于 2012-11-01T20:06:59.217 回答