我如何找到导致 Java 中的堆 space 错误的对象/线程? (VisualVM, 内存分析器)

How can I find what objects/ threads are causing heap space error in Java? (VisualVM, MemoryAnalyzer)

我正在使用一个 ETL 软件 Pentaho(只是稍微相关)——它建立在 Java 之上。每次进程循环 80 次后,我都会收到堆 space 错误 --- 我可以增加分配给 Java -xmx2048 的内存或者你有什么,但那只是 "delays"错误,是创可贴修复。

我有 VisualVM 和 MemoryAnalyzer,但我想找出在哪里可以找到导致无关对象持续存在的根本原因/对象/线程。我可以在 VisualVM 中看到堆 space 内存随时间逐渐增加。我不确定我到底应该做什么才能找到原因。分析错误时的堆转储?

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

  1. JProfiler
  2. 你的包

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

如果命令行工具不怕您,请尝试 aprofhttps://github.com/devexperts/aprof

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