首页 > 解决方案 > 为 Spring Boot 应用程序捕获堆转储

问题描述

我是堆分析的新手。我们一直在我们的 Web 应用程序中使用 Spring Boot。最近堆使用率变得太高了。为了使用 Mat 和 JProfiler 等工具分析堆转储,我使用执行器下载它,如下所示:

http://localhost:8080/actuator/heapdump

但是每次,我都在进行堆转储,堆使用率变得很低。我怀疑可能是 GC 一直在踢。如果我错了,请纠正。所以我无法捕捉到实际情况。有没有办法在不触发 GC 的情况下进行堆转储?或者无论如何,只要堆使用量增加超过 500 MB,就会生成堆转储。

标签: javaspring-bootspring-boot-actuatorheap-dump

解决方案


您可以有一项@Scheduled任务来定期获取堆使用情况并生成 500 MB 堆转储。您可以使用ManagementFactory.getMemoryPoolMXBeans();,它显示不同的堆区域及其使用情况。

要在外部做到这一点:

您可以使用 jstat 对堆使用情况进行外部监控。将其包装在一个脚本中,该脚本将分析jstat -gc然后用于jmap获取堆转储。


推荐阅读