我有一个使用spring数据的spring boot应用程序。我有本机查询和查询方法。显然我的应用程序遇到内存问题。我尝试执行jmap -histo来确定使用大量资源的类。
在我的第一个jmap转储中,这是结果(第一天)-重新开始
然后是第二天的结果
注意org.hibernate.hql.internal.ast.tree.Node开始出现。
然后在第三天
org.hibernate.hql.internal.ast.tree.Node的内存大小正在增加。
希望您能帮助我,或者有什么建议吗?由于尚未隔离导致此问题的代码,因此我尚未发布代码。顺便说一句,晚上没有任何操作,所以我希望应该运行垃圾收集。
答案 0 :(得分:0)
我无法回答是什么原因造成的。但是,将Spring Boot的版本(反过来又将Hibernate版本更新)更新为2.2.1.RELEASE似乎可以为我解决这些问题。
答案 1 :(得分:0)
我也遇到了同样的问题。以下配置可能会有所帮助。
spring:
jpa:
properties:
hibernate:
query:
plan_cache_max_size: 64
plan_parameter_metadata_max_size: 32
答案 2 :(得分:0)
显然,hibernate正在缓存其所有查询,这是为了使hibernate不会重新编译准备好的语句,但是,如果您有动态查询,它将导致内存溢出。
例如:
准备好的声明
Select * from employee where id = :id
->可以,因为休眠将只缓存准备好的语句,但是如果您这样做的话
select * from employee where id = 1
select * from employee where id = 2
select * from employee where id = 3
-> Hibernate将缓存这3条语句,从而导致内存溢出。