记一个内存泄漏问题:Query Plan Cache BoundedConcurrentHashMap占用堆内存

原因是hibernate会缓存sql语句以减少重复编译,便于直接命中提高效率。这个缓存默认最大值为2G (2024.05.08更正,queryPlanCache的map entry默认容量上限是2048,如果里面缓存的每个对象很大,则内存远超2G),且在使用in时,只要in后面的参数有任何一个不一样的,就会视为不同的语句而保存下来。
解决这个问题可以将缓存最大值改小。
我看大家都是这样写的:

spring:
  jpa:
    properties:
      hibernate:
        query:
          plan_cache_max_size: 64
          plan_parameter_metadata_max_size: 32
          plan_cache_max_soft_references: 1024
          plan_cache_max_strong_references: 64

实际上我在用spring boot的时候是这样写的:
(写入application.properties文件即可)

spring.jpa.properties.hibernate.query.plan_cache_max_size=128
spring.jpa.properties.hibernate.query.plan_parameter_metadata_max_size=64
spring.jpa.properties.hibernate.query.plan_cache_max_soft_references=1024
spring.jpa.properties.hibernate.query.plan_cache_max_strong_references=128

这里最重要的参数是plan_cache_max_size,把它设小之后就可以解决部分内存

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值