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