1

我将 Play Framework 2 用于各种搜索引擎以及它附带的默认缓存。我缓存每个查询的结果。令人惊讶的是,我遇到了内存不足错误。我没有指定驱逐时间,但我的印象是 EhCache 将使用默认策略(Play 2.0 ehcache.xml)驱逐条目。不是这样吗?我可以ehcache.xml通过指定自己的来覆盖 Playconf/ehcache.xml吗?我需要什么不同的配置?

更新:OOM 错误可能是由另一个组件引起的,经过更多挖掘。但问题仍然存在:当内存紧张时,Play 的 EHCache 会驱逐吗?启用缓存确实会导致我更快地出现 OOM 错误。

4

1 回答 1

2

根据您链接到的 ehcache.xml,当条目计数达到堆中的 10k 个条目时,ehcache 将逐出。现在您还使用了 diskStore,上限为 10M 条目。但是磁盘存储仍然需要所有密钥才能放入内存......这可能是您面临的问题。

另外,请注意 TTI/TTL 将被内联处理。也就是说,数据在访问时会检查新鲜度。Ehcache 不会产生一个线程,该线程将主动地从缓存中过期并过期元素。

希望这可以帮助...

于 2012-11-22T18:01:36.470 回答