我是堆分析的新手。我们一直在Web应用程序中使用spring boot。最近,堆使用率变得过高。为了使用Mat和JProfiler之类的工具分析堆转储,我使用执行器下载它,如下所示:
http://localhost:8080/actuator/heapdump
但是每次我进行堆转储时,堆使用率都会降低。我怀疑那段时间可能是GC踢。如果我错了,请纠正。因此,我无法捕获实际情况。有什么办法可以在不触发GC的情况下进行堆转储?还是无论如何,只要堆使用量增加超过500 MB,就会生成heapdump。
答案 0 :(得分:1)
您可以执行@Scheduled
任务来定期获取堆使用量并生成500 MB的堆转储。您可以使用ManagementFactory.getMemoryPoolMXBeans();
,它显示了不同的堆区域及其用法。
要在外部执行此操作:
您可以使用jstat对堆使用情况进行外部监视。将其包装在脚本中,该脚本将分析jstat -gc
,然后使用jmap
获取堆转储。