EHcache 在使用磁盘存储缓存时的性能

EHcache performance in using disk store cache

我们在我们的应用程序中使用了 ehcache。看下面的配置:

<diskStore path="java.io.tmpdir" />
<cache name="service" maxElementsInMemory="50000" eternal="true" overflowToDisk="true"/>

既然我们配置为eternal="true",是不是要永远创建缓存?。有没有可能 运行 out of disk space?

对磁盘存储的性能有何影响?。它肯定比内存中的缓存慢,但影响有多大。

如果磁盘中存放的缓存较多,会不会造成多次文件操作的IO问题?

请建议生产级应用程序的最佳实践。假设我们有 3 GB 堆内存和 25000 个并发用户访问该应用程序。但是,我们的应用程序中没有使用数据库。

应用程序部署在 WAS 8.5.5 中。

eternal=true 表示映射永不过期。

overflowToDisk=true 意味着放入缓存的所有映射最终都会写入磁盘,从放入缓存的第一个映射开始。当前的 Ehcache 分层模型(自版本 2.6.0 起)始终使用 较慢 存储 - 此处为磁盘 - 以便为您提供可预测的延迟。当一个映射被访问时,它会被错误地放入堆中以便更快地检索。当堆中有太多映射错误时,将开始从堆中逐出以根据 maxElementsInMemory.

保持堆缓存大小

鉴于您没有通过设置 maxElementsLocalDisk 来调整磁盘存储的大小,它默认为 0,这意味着没有限制。所以是的,如果您从未明确删除缓存条目,您可能 运行 磁盘不足 space。

在不了解应用程序详细信息的情况下很难推荐合适的缓存大小。我可以建议您测量堆和磁盘使用情况,并评估增加的内存使用量何时超过性能增益。