我们正在运行Java应用程序的生产中的VM上存在一些内存泄漏问题,Old Gen堆使用量每天都在快速增长,因此我想创建堆转储来对其进行分析。

但是,我注意到VisualVM将在堆转储之前执行完整的GC,这将清除Old Gen,在这种情况下,堆转储将无用。

我也尝试使用以下命令:

jmap -dump:live,format = b,file = heap.bin

它还将触发完整的GC。

请问是否有一种方法可以在没有完整GC(或没有GC)的情况下创建堆转储?还是有更好的方法来分析内存泄漏?

JDK版本:1.7.0_45

谢谢。

最佳答案

要创建堆转储,将有一个完整的GC。在堆外创建类直方图时,也是如此。

如果要分析Full GC之间的内存泄漏,则可能唯一的选择是使用Java Profiler(任务控制,jProfiler等)对进行内存分析

有关Java Mission Control Heap Profile的信息,请参见此Q/A。

07-26 04:52
查看更多