为啥 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() 占用这么多处理器时间?的主要内容,如果未能解决你的问题,请参考以下文章

为啥MongoDB会占用这么多空间?

为啥 Java 中的 HashSet 占用这么多内存?

为啥 QML Image 占用这么多内存?减慢申请

为啥我的 UIImage 占用这么多内存?

为啥 iOS 设备上的 glGenerateMipmap() 会占用这么多客户端内存?

为啥导出到可运行的 jar 会使应用占用这么多空间?