java - 堆大小迅速增加 spring boot 应用程序

标签 java mongodb hibernate spring-boot jvm

我在 spring boot 上有应用程序,使用 mongoDB 和 hibernate for MySQL。 应用程序的堆大小在生产中不断增加。我提供的最大堆大小为 24 GB,这已经很大了。现在使用的堆已达到 23 GB。 对如此巨大的内存进行堆转储是否好,它是否会影响性能,因为它是实时应用程序。

另一种检测内存泄漏的方法? 或者其他分析 hibernate 或 mongo 指标的方法?

最佳答案

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

1)检查heap占用的内存是否真的被使用了(可以在jprofiler或者jvisualvm中看到)。如果应用程序占用了所有内存但不使用它,您可以使用 Xmx jvm 参数将其限制为一些合理的值。

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

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

关于java - 堆大小迅速增加 spring boot 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53741216/

相关文章:

java - 为什么我的 schema.ddl 在 hibernate3-maven-plugin 之后是空的?

java - 数组上的预增量如何工作

MongoDB/Mongoid多对多建模问题

java - 如何解决一对一关系的 hibernate jpa错误?

java - 如果连接已关闭,Spring 客户端需要从池中检索连接

java - 有什么办法可以减少这些线路吗?

windows - 将一个文件拖到另一个文件上并释放究竟有什么作用?

mongodb - 将 mgo 与转换为 map[string]interface{} 的嵌套文档一起使用。如何遍历 map ?

javascript - 使用 Graphql 时在 Mongoose 模式中填充 "Ref"