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