追踪'超出GC开销限制'错误

时间:2014-05-06 21:43:39

标签: java garbage-collection profiling

追踪(即查找原因)“超出GC开销限制”错误的最简单方法是什么?

我不认为有好的选择:

  • -XX:-UseGCOverheadLimit参数添加到JVM调用。 Java异常告诉我在我的实现中有一些非常低效的东西,我想解决这个问题。
  • “去看看你的代码”。该项目非常庞大,因此我需要一些关于 where 的线索,以寻找低效率。

我要使用探查器吗?如果是的话,你会建议哪一个?

我应该查看GC日志吗?我已经尝试过这样做,但我对它有一点了解,似乎没有明确的代码指针(说哪些对象正在进行GC)。

有关此错误的问题已经被提出很多问题,但似乎没有人回答这个具体问题。

1 个答案:

答案 0 :(得分:0)

开始分析应用的最简单工具

Netbeans带有内置的分析器 Jconsole也可以帮助一点 VisualVm也可以提供一些帮助。

真正棒极了的商业工具是DyanTrace

现在找到修复问题的方法: 虽然可以通过其他方式解决问题。但是以下事情可能会有所帮助 1)您看到的症状可能是在代码中创建了太多短期对象的结果。现在这不是内存泄漏情况,而是为JVM清理太多垃圾。而Jvm未能跟上这一步。您需要检查代码,了解这些对象的创建位置。

2)您可以做的第二件事是在两次GC运行之间定期进行多次堆转储,并在netbeans或您选择的其他工具中比较这些堆转储。你需要在你的应用程序进入这种糟糕的状态之前这样做。这种比较将告诉你堆中增长的内容,并且可能会给你一个指向你的代码的指针。

我希望这有助于解决您的问题。 :)