堆大小快速增加的Spring Boot应用程序

时间:2018-12-12 10:42:04

标签: java mongodb hibernate spring-boot jvm

我在春季启动时有应用程序,使用mongoDB和针对MySQL的休眠模式。 应用程序的堆大小在生产中不断增加。我提供的最大堆大小为24 GB,这已经很大了。现在使用的堆已达到23 GB。 采取如此大的内存堆转储是否很好,因为它是实时应用程序,因此会影响性能。

另一种检测内存泄漏的方法呢? 还是其他分析休眠或mongo指标的方法?

1 个答案:

答案 0 :(得分:0)

尝试查看jprofiler或jvisualvm中的堆内存。选项之一可能是堆将占用您提供的所有内存,但仅使用其中的一部分。通常,这将取决于垃圾收集器算法。我建议您执行以下步骤:

1)检查是否实际使用了堆占用的内存(可以在jprofiler或jvisualvm中看到它)。如果应用程序占用了所有内存但没有使用它,则可以使用Xmx jvm参数将其限制为合理的值。

2)查看负载和空闲状态下的内存使用情况。看到不同。根据您执行的操作,内存中可能会有一些对象,但是应该不时地对其进行收集。

3)如果确实泄漏,并且您看到jvm保留的内存确实被使用并且从未释放过-进行内存转储,然后查看那里放置了哪种对象(再次尝试jprofiler或jvisualvm)。这将为您提供寻找位置的线索。