我们在我们的应用程序中使用ehcache。请查看以下配置:
<diskStore path="java.io.tmpdir" />
<cache name="service" maxElementsInMemory="50000" eternal="true" overflowToDisk="true"/>
由于我们已经配置为eternal =“true”,它是否会永远创建缓存?是否有可能耗尽磁盘空间?
对磁盘存储的性能影响是什么?它肯定比内存缓存慢,但影响有多大。
如果磁盘中存储了更多缓存,是否会导致执行多个文件操作的IO问题?
请为生产级应用建议最佳实践。考虑到我们有3 GB的堆内存和25000个并发用户访问应用程序。但是,我们的应用程序中没有使用数据库。
该应用程序部署在WAS 8.5.5中。
答案 0 :(得分:2)
eternal=true
表示映射永不过期。
overflowToDisk=true
表示放入缓存中的所有映射最终将写入磁盘,从缓存中的第一个映射开始。当前的Ehcache分层模型(自2.6.0版本开始)总是使用较慢的存储 - 磁盘 - 以便为您提供可预测的延迟。访问映射时,它会出现故障进入堆中以便更快地进行检索。如果堆中的映射太多,则从堆中驱逐以根据maxElementsInMemory
保持堆缓存大小。
如果您没有通过设置maxElementsLocalDisk
来调整磁盘存储的大小,则默认为0
,这意味着没有限制。所以,如果您从未明确删除缓存条目,则可能会耗尽磁盘空间。
如果不知道应用程序的详细信息,很难建议适当的缓存大小。我建议您测量堆和磁盘使用情况,并评估增加的内存使用量何时超过性能增益。