【发布时间】:2021-06-05 14:08:02
【问题描述】:
我有一个 spring-boot 应用程序,我怀疑它可能存在内存泄漏。随着时间的推移,内存消耗似乎增加了,在我重新启动应用程序之前占用了大约 500M 的内存。重新启动后,它需要大约 150M。 spring-boot 应用程序应该是一个非常无状态的 rest 应用程序,并且在请求完成后不应该留下任何对象。我希望垃圾收集器能解决这个问题。
目前在生产中,spring-boot 应用程序似乎使用了 343M 的内存 (RSS)。我得到了应用程序的堆转储并对其进行了分析。根据分析heapdump只有31M大小。那么缺失的 300M 在哪里呢? heapdump 与应用程序使用的实际内存有何关联?我如何分析堆转储后的内存消耗?如果使用的内存不在堆中,那么它在哪里?如何发现spring-boot应用程序的内存消耗是什么?
【问题讨论】:
-
Eclipse MAT 可以做到这一点。还有更多:dzone.com/articles/…
-
我认为它只分析堆。而且堆似乎并没有占用那么多内存。所以我想知道我是否会从堆分析中受益
-
也许您应该告诉我们您如何以及在哪里/在哪个工具中看到内存消耗。也许您正在尝试解决一个不存在的问题
-
我用visualvm分析了heapdump文件。还有基本的 linux 工具来查看内存消耗
-
使用 Java 工具,而不是操作系统工具,因为它们提供了错误的观点。您正在寻找不存在的内存泄漏。查看 Java 将进程内存用于什么用途:spring.io/blog/2019/03/11/memory-footprint-of-the-jvm
标签: java spring spring-boot