1

我的程序一直以最大 1% 的 CPU 使用率运行,但有时由于程序内部的某些事件,我无法确定,它每 15 秒有 5-10 秒的 100% 使用率。它看起来像一个导致使用高峰的线程,但我无法确定它的来源(有 8000 个类,所以这很难)。很难测试问题是否仍然存在(例如在使某些代码“死”之后),因为该问题有时会在虚拟机生命周期的几个小时后开始存在。

您知道什么可以帮助我找到问题的根源吗?

4

1 回答 1

5

如果没有更多信息,甚至无法尝试猜测问题的原因。

我建议使用诸如VisualVM之类的分析器来确定导致问题的线程以及发生问题时可能的确切情况。

例如,使用分析器会告诉您:

  • 哪些线程处于活动状态并占用 CPU 资源
  • 无论是 VM 还是应用程序线程
  • 在垃圾收集操作上花费了多少时间 - GC 通常是 CPU 使用率峰值和延迟的来源,尽管我相信最近的 JVM 在这方面有所改进。
  • 是否存在锁定问题
  • ...
于 2012-11-10T13:35:54.140 回答