org.hibernate.engine.query.spi.QueryPlanCache引起内存泄漏问题排查
问题现象:
一个后台服务在运行一段时间后,观察内存一直在增加,使用MAT工具,打开堆文件分析内存泄漏情况:fileName_Leak_Suspects的index
发现如下提示:
One instance of "org.hibernate.internal.SessionFactoryImpl" loaded by "org.springframework.boot.loader.LaunchedURLClassLoader @ 0x2c00204b8" occupies 8,137,929,888 (98.05%) bytes. The memory is accumulated in one instance of "org.hibernate.internal.util.collections.BoundedConcurrentHashMap$Segment[]" loaded by "org.springframework.boot.loader.LaunchedURLClassLoader @ 0x2c00204b8".
Keywords
org.hibernate.internal.util.collections.BoundedConcurrentHashMap$Segment[]
org.springframework.boot.loader.LaunchedURLClassLoader @ 0x2c00204b8
org.hibernate.internal.SessionFactoryImplDetails »
打开details,可以看到 org.hibernate.engine.query.spi.QueryPlanCache 占用了大量空间。问题就出在这里。
hibernate中的QueryPlanCache会缓存sql,QueryPlanCache占用多大,基本上归结为IN子句中具有可变数量的值,而Hibernate试图缓存这些查询计划。如果in子句后面跟不同数量或数值,都会增加一条缓存(业务中确实有这么一条根据id进行记录更新操作)。从而缓存大量的sql导致heap内存溢出。
解决方案:
在application.properties文件增加以下配置:
#manages the number of ParameterMetadata instances in the cache (defaults to 128)
spring.jpa.properties.hibernate.query.plan_parameter_metadata_max_size=32#controls the maximum number of entries in the plan cache (defaults to 2048)
spring.jpa.properties.hibernate.query.plan_cache_max_size=64#Sets the maximum number of soft references held in the cache. Set this value to Integer.MAX_VALUE to replicate the behavior of 5.1.1 and earlier. e.g. 2048 (default)
spring.jpa.properties.hibernate.query.plan_cache_max_soft_references=1024#Sets the maximum number of strong references held in the cache. e.g. 128 (default)
spring.jpa.properties.hibernate.query.plan_cache_max_strong_references=64spring.jpa.properties.hibernate.query.in_clause_parameter_padding=true
org.hibernate.engine.query.spi.QueryPlanCache引起内存泄漏问题排查相关推荐
- 一次完整的JVM堆外内存泄漏故障排查记录
前言 记录一次线上JVM堆外内存泄漏问题的排查过程与思路,其中夹带一些JVM内存分配机制以及常用的JVM问题排查指令和工具分享,希望对大家有所帮助. 在整个排查过程中,我也走了不少弯路,但是在文章中我 ...
- Java内存泄漏的排查
1.内存溢出 一种通俗的说法. 1.内存溢出:你申请了10个字节的空间,但是你在这个空间写入11或以上字节的数据,出现溢出. 2.内存泄漏:你用new申请了一块内存,后来很长时间都不再使用了(按理应该 ...
- python 内存泄漏的排查
python 内存泄漏的排查 判断该次上线或发版的内容,排查到具体上线了那些接口或修改了那些接口 单起一个服务,使用ps -aux |grep pid 查看该进程占用的内存大小 work@xxx:~$ ...
- java 内存泄露对象排查_记录一次 java内存泄漏的排查
1.问题:jar进程会随着时间由 30% 上涨到 70% 直到虚机报警.重启过后,还是会缓慢上涨: 进程数也在上涨: 2.在排查内存问题时,可能会使用的命令 1)查看 java 进程:jps -l 可 ...
- 一次 Java 内存泄漏的排查
由来 前些日子小组内安排值班,轮流看顾我们的服务,主要做一些报警邮件处理.Bug 排查.运营 issue 处理的事.工作日还好,无论干什么都要上班的,若是轮到周末,那这一天算是毁了. 不知道是公司网络 ...
- 【错误记录】Android 内存泄漏 错误排查记录 ( FinalizerReference 内存泄漏 )
文章目录 一. 报错信息 二. 内存排查 三. 代码分析及修改 四. 不同版本说明 参考以下博客 : [Android 内存优化]Android Profiler 工具常用功能 ( 监测内存 | 内存 ...
- jstat 内存泄漏_一次Java内存泄漏的排查!要了自己的老命!
点击上方"Java之间",选择"置顶或者星标" 你关注的就是我关心的! 作者:枕边书 来源:https://zhenbianshu.github.io 一.由来 ...
- 分享一次 Java 内存泄漏的排查
由来 前些日子小组内安排值班,轮流看顾我们的服务,主要做一些报警邮件处理.Bug 排查.运营 issue 处理的事.工作日还好,无论干什么都要上班的,若是轮到周末,那这一天算是毁了. 不知道是公司网络 ...
- Kaldi内存泄漏问题排查
转载自:https://www.baidu.com/link?url=uUnBEi2XoXwkMYf_mLzKuZmdz8auQ5mjvwYE0c5zsKS2kUcEMv3fo9wUmva2S84mX ...
最新文章
- 《监控》再起风云,连同创作中的《监控2》成功牵手影视公司
- CVPR2020中关于3D点云分割
- R语言绘制韦恩(venn)图
- 负载均衡探测器lbd
- 自定义注解-aop实现日志记录
- Boost:ping的测试程序
- WebBrowser内核指定
- mysql挂载数据卷_记一次生产数据库数据文件进行分区转移
- 最佳论文!牛津大学揭示梯度下降复杂度理论
- 数仓搬迁:从方法到实践,带你解决数据一致性对比
- “碰瓷”特斯拉翻船,卡车界明星创企Nikola身陷“骗局”危机
- PAIP.ASP重复INCLUDE包含引起的重定义错误解决方案
- 增长量计算n+1原则_资料分析听课笔记
- 第三课 protel学习系列——protel功能拓展
- 放入http请求头中的内容如果含有中文必须编码
- html给一个样式最高权重,什么是CSS权重?
- 漫谈TCP-AIMD/BBR的公平性以及buffer bloat
- 花花公子跟风删除Facebook主页,区块链技术可打破互联网垄断
- 意图推荐 Metapath-guided Heterogeneous Graph Neural Network for Intent Recommendation
- Python迷宫游戏
热门文章
- 计算机技术个别化教学,现代教育技术在个别化教育教学的作用
- oracle数据日期格式,Oracle常用日期数据格式
- python - 用struct以及HxD查看浮点数在内存中的存储,默认是双精度浮点数
- 操作系统实验11:内存管理实验(DAY 62)
- 《点融支付系统架构的演进》阅读有感
- JS实现表格搜索内容
- 内容广告联盟,劣币是怎么驱逐良币的。
- 全日制和非全日制之争,看完六年前的这个文件心里就有数了
- 优秀的装机必备「系统「效率「笔记「程序员」mac软件集
- atthesametime啥意思_aroundthesametime和atthesametime的区别是什么