我正在运行 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 文档不是信息最丰富的,谷歌搜索也没有产生太多信息。