我们正在运行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。