0
点赞
收藏
分享

微信扫一扫

【OOM问题】hibernate QueryPlanCache引发的heap区内存溢出


目录

​​一、参考资料​​

​​二、查阅解决办法​​

​​三、问题描述​​

​​四、解决方案与效果展示​​

一、参考资料

​​hibernate QueryPlanCache引发的heap区内存溢出_人生如逆旅,我亦是行人。。。

​​记一次OOM排查解决【图文】_zhuwensheng_51CTO博客​​

​​记录一次 java内存泄漏的排查 - 我的小时代 - 博客园​​

​​问题总结----记一次Jpa In语句QueryPlanCache导致的JVM内存溢出_cyfblog的博客-

​​记一个内存泄漏问题:Query Plan Cache BoundedConcurrentHashMap占用堆内存_yogima的博客

二、查阅解决办法

​​Hibernate 中文文档 | Hibernate 中文网​​

​​https://docs.jboss.org/hibernate/orm/5.6/quickstart/html_single/​​

​​https://docs.jboss.org/hibernate/orm/5.6/userguide/html_single/Hibernate_User_Guide.html​​

​​QueryPlanCache 内存泄漏解决方法_这就是快乐嘛-

​​How to improve statement caching efficiency with IN clause parameter padding - Vlad Mihalcea​​

hibernate.query.plan_cache_max_size=128

hibernate.query.plan_parameter_metadata_max_size=64

        这个方案的问题,您可能会损失性能。如果您修复了计划缓存大小,但仍然没有修复填充缓存的实际查询 - 您的所有缓存可能会被该错误查询填充,从而没有空间来缓存其他查询。因此缓存可能大部分时间都在忙于那个糟糕的查询,而其他查询的性能可能会降低, 因为它们没有被正确缓存或过早从缓存中被逐出

三、问题描述

/**
* 根据UID批量查询
* // TODO: 2021/11/19 会产生大量QueryCache缓存
*/
List<BaseUserEntity> findByIdIn(List<Long> ids);

【OOM问题】hibernate QueryPlanCache引发的heap区内存溢出_hibernate

【OOM问题】hibernate QueryPlanCache引发的heap区内存溢出_html_02

 

【OOM问题】hibernate QueryPlanCache引发的heap区内存溢出_缓存_03

【OOM问题】hibernate QueryPlanCache引发的heap区内存溢出_html_04

【OOM问题】hibernate QueryPlanCache引发的heap区内存溢出_html_05

【OOM问题】hibernate QueryPlanCache引发的heap区内存溢出_缓存_06

 

【OOM问题】hibernate QueryPlanCache引发的heap区内存溢出_java_07

Class Name                                                                                                                                                                                                                                                                                   | Shallow Heap | Retained Heap | Percentage
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
byte[12265] @ 0x92edb390  select generatedAlias0 from BaseUserEntity as generatedAlias0 where generatedAlias0.id in (:param0_0, :param0_1, :param0_2, :param0_3, :param0_4, :param0_5, :param0_6, :param0_7, :param0_8, :param0_9, :param0_10, :param0_11, :param0_12, :param0_13, :param0...|       12,288 |        12,288 |      0.00%
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 

 重启之前65%堆内存,重启之后20-30%

四、解决方案与效果展示

【OOM问题】hibernate QueryPlanCache引发的heap区内存溢出_html_08

【OOM问题】hibernate QueryPlanCache引发的heap区内存溢出_hibernate_09

【OOM问题】hibernate QueryPlanCache引发的heap区内存溢出_hibernate_10

 

【OOM问题】hibernate QueryPlanCache引发的heap区内存溢出_hibernate_11

hibernate.query.in_clause_parameter_padding=true

【OOM问题】hibernate QueryPlanCache引发的heap区内存溢出_java_12

【OOM问题】hibernate QueryPlanCache引发的heap区内存溢出_缓存_13

优化之前

【OOM问题】hibernate QueryPlanCache引发的heap区内存溢出_java_14

 调整参数优化之后

【OOM问题】hibernate QueryPlanCache引发的heap区内存溢出_java_15

【OOM问题】hibernate QueryPlanCache引发的heap区内存溢出_缓存_16

 

举报

相关推荐

0 条评论