为啥 dequeue() 占用这么多处理器时间?
Posted
技术标签:
【中文标题】为啥 dequeue() 占用这么多处理器时间?【英文标题】:Why is dequeue() taking so much processor time?为什么 dequeue() 占用这么多处理器时间? 【发布时间】:2019-09-10 20:02:39 【问题描述】:Visual VM 显示 FifoMessageDispatchChannel.dequeue() 花费了很多时间。 Tomcat 进程正在使用大约 100% 的处理器内核。
【问题讨论】:
您的屏幕截图似乎表明dequeue
使用零处理器时间。
如果您遇到高 CPU 负载的问题,那么您怀疑方法错误。该线程只是等待状态为TIMED_WAITING
的消息,并且消耗零CPU 时间。要找到真正的原因,您需要按 CPU 时间对 VisualVM 中的记录进行排序。
感谢其他人,贝德拉
其他人或 Bedla,您能否在回答中附上解释自用时间 CPU 的参考资料?
【参考方案1】:
最可能的原因是您在很短的等待时间内调用了消费者接收方法,但如果没有更多信息则无法判断。调度通道只是检查队列中的数据,如果没有数据,将阻塞给定的超时等待信号唤醒并再次检查或超时并返回。
【讨论】:
非常感谢,蒂姆。我会看看我能找到类似的东西,但我不确定要查找调用的方法。不知道调用的方法是在Active MQ,Camel还是别的什么的。【参考方案2】:dequeue() 不像that other guy said 那样占用太多的处理器时间。 This answer to another question 解释说 Self Time 包括花在处理以外的事情上的时间,例如等待。
Self 和 Total Time (CPU) 包括使用处理器的方法中的时间,对于 dequeue(),它们为 0。要查找使用处理器最多的方法,请按自身时间 (CPU) 排序,如 Bedla indicated。
【讨论】:
以上是关于为啥 dequeue() 占用这么多处理器时间?的主要内容,如果未能解决你的问题,请参考以下文章