如何在Java中找到导致堆空间错误的对象/线程? (VisualVM,MemoryAnalyzer)

时间:2015-05-21 15:11:05

标签: java memory-management pentaho visualvm

我使用的是ETL软件Pentaho(仅略显相关) - 它是基于Java构建的。我每次进行80次循环后都会出现堆空间错误 - 我可以增加分配给Java -xmx2048的内存或者你有什么内容,但这只会延迟"错误,是一个创可贴修复。

我有VisualVM和MemoryAnalyzer但我正在试图找出导致无关对象持久存在的根本原因/对象/线程的位置。我可以在VisualVM中看到堆空间内存随着时间的推移逐渐增加。我不确定我应该做些什么才能找到原因。在出错时分析堆转储?

2 个答案:

答案 0 :(得分:2)

有几种工具可以解决这个问题: 试试:

  1. 的JProfiler
  2. Yourkit
  3. Jprofiler实际上是一个很好的工具,可以跟踪应用程序中的内存泄漏。您可以按类或在包级别进行调整。

答案 1 :(得分:1)

如果命令行工具没有吓到你,请尝试 aprof https://github.com/devexperts/aprof

当您必须在生产环境中通过某种原因进行配置时非常有用(例如,您无法在其他任何地方重现问题)。