gpt4 book ai didi

java - 堆转储中有很多 hibernate 查询。我该如何限制?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:10:18 25 4
gpt4 key购买 nike

我正在处理一个大型应用程序,它有数百个 hibernate 实体和 EAGER 关联。当我启动此应用程序时,内存消耗非常高(超过 1 GB)。

查看刚启动的应用程序的JVM heap dump,分析了解到大部分内存被char[]占用,不同的SELECT语句来自应用程序的不同实体。

我想这个SELECTs是由Hibernate的查询计划缓存生成的。

我想为开发环境限制这个缓存的大小。我试图用一些属性来限制大小:

"hibernate.query.plan_cache_max_size", "16" //default is 2048
"hibernate.query.plan_parameter_metadata_max_size", "16" //default is 128

但是内存消耗没有区别。

我应该如何限制 Hibernate 查询的缓存?

我正在使用 Hibernate 5.0.10。

最佳答案

确实有很多与“查询计划缓存内存使用”相关的问题。 (1234)。但作为解决方案,我们现在可以设置一些设置,其中之一 - hibernate.query.plan_cache_max_size。很奇怪,它没有帮助,在我的情况下它起作用了。也许问题隐藏在其他地方。

如果您有堆转储,请尝试使用内存分析器 (MAT) 来检查您的假设,运行此 OQL 查询(如果您尚未执行):

SELECT l.query.toString() FROM INSTANCEOF org.hibernate.engine.query.spi.QueryPlanCache$HQLQueryPlanKey l

它会给你额外的信息。

以防万一。您是否尝试更改所有这些设置的值?

"hibernate.cache.query_cache_factory"
"hibernate.query.plan_cache_max_size"
"hibernate.query.plan_cache_max_soft_references"
"hibernate.query.plan_cache_max_strong_references"
"hibernate.query.plan_parameter_metadata_max_size"

关于java - 堆转储中有很多 hibernate 查询。我该如何限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46496411/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com