我在某些WAS 7.0.0.19程序上使用了jvisualVM-并对CPU进行了采样。看来其中很大一部分去了boundedbuffer.waitGet_()。
您能解释一下这是否正常吗?
谢谢。
最佳答案
是的,这实际上是(某种)正常。这些时间是由处于以下状态的线程引起的:
"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)”。如果您对“ Self time(CPU)”进行排序,实际上可以更真实地了解WebSphere进程的CPU使用情况。
关于java - WebSphere:boundedbuffer.waitGet_正在用尽大部分CPU,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13112485/