0

我正在运行 ATG 9,并在 repository.xml 中配置了一堆不同的对象,以具有特定的缓存大小、ttl 等。

例如:

<item-descriptor name="USER" 
    query-expire-timeout="300000"
    item-expire-timeout="300000"
    item-cache-timeout="300000" 
    item-cache-size="20000"
    query-cache-size="50">
...

我期望缓存不会超过该大小并且会使旧项目过期以保持缓存大小等于或低于项目缓存大小。但是,当我查看 Dynamo 管理控制台中的缓存统计信息时,我看到我们的几个项目的 usedRatios 为 500-1000%。随着越来越多的项目被缓存并且显然从未释放,这会随着时间的推移占用 JVM 中的所有内存。如果我在管理控制台中调用 Repository 上的 invalidateCaches 方法,则可用内存会向上跳回,然后缓慢的下降再次开始。

如何确保缓存不会增长超过其配置的大小并接管所有内存?我缺少一些配置设置吗?是否必须采用一些代码技巧来防止缓存失控?ATG 文档不是信息最丰富的,谷歌搜索也没有产生太多信息。

4

1 回答 1

0

启动 ATG 实例后,我建议导航到 Dynamo 管理页面 (/dyn/admin/nucleus/atg/userprofiling/ProfileAdapterRepository/?propertyName=definitionFiles) 中的 ProfileAdapterRepository 并查看存储库定义文件的组合视图。这是确定最终文件是什么样子的最佳方式,因为它可以由许多文件组成。

您应该通过此界面看到您在“用户”存储库项上配置的属性(注意全部小写)。

如果您在此处看不到您的属性,那么您可能没有加载存储库定义文件,您正在处理的模块未启动或文件不在配置路径上。

于 2012-02-16T12:56:20.737 回答