Java 为什么EhCache中的每个磁盘存储刷新都需要4秒?

Java 为什么EhCache中的每个磁盘存储刷新都需要4秒?,java,performance,file-io,filesystems,ehcache,Java,Performance,File Io,Filesystems,Ehcache,我们正在使用EhCache 2.6.2。因为我们需要高生存能力,所以我们只使用磁盘存储,而不使用内存存储 在程序中的每次数据更新之后,我们都会将数据刷新到磁盘上 一段时间后,cache.data文件超过了最大1 gb。当数据文件为250MB时,刷新时间为250ms,当数据文件为1gb时,刷新时间为3.5秒 我们的对象每个大约20kb,因此有数百万个 有没有办法将数据文件拆分为几个较小的文件,并让EhCache处理 我们希望解决方案只涉及配置更改,而不涉及代码更改,因为它在生产环境中 环境详情:

我们正在使用EhCache 2.6.2。因为我们需要高生存能力,所以我们只使用磁盘存储,而不使用内存存储

在程序中的每次数据更新之后,我们都会将数据刷新到磁盘上

一段时间后,cache.data文件超过了最大1 gb。当数据文件为250MB时,刷新时间为250ms,当数据文件为1gb时,刷新时间为3.5秒

我们的对象每个大约20kb,因此有数百万个

有没有办法将数据文件拆分为几个较小的文件,并让EhCache处理

我们希望解决方案只涉及配置更改,而不涉及代码更改,因为它在生产环境中

环境详情:


在AIX 6.1 64位上使用IBM Java 1.6和EhCache 2.6.2运行WebSphere 7。

在EhCache 2.6.2中,所有缓存数据都将始终位于磁盘上,因此,除了磁盘存储之外,还可以使用内存存储来提高速度

当你说:

在程序中的每次数据更新之后,我们都会将数据刷新到磁盘上

关于磁盘存储的性能,您可以尝试一个选项:

<cache diskAccessStripes="4" ...>
  ...
</cache>

...

其中,
diskAccessStripes
属性取二次方值。先用较小的值试试,看看是否有收获。此属性的确切效果将取决于许多因素:硬件、操作系统以及应用程序的使用模式。

请注意,磁盘存储的开放源代码版本不会提供“高生存性”。e、 g.VM崩溃或JVM(和CacheManager)正常关闭会导致数据损坏。虽然Ehcache在确定磁盘上的缓存数据在重新启动时是否没有损坏方面做得最好,但它并不总是能够做到这一点。谢谢您的回答!我在你提到的那句话中提到的是,每次更新缓存中的数据后,都会有一个强制缓存写入磁盘。它不是等待定期自动保存。我也支持在磁盘和RAM之间结合缓存的想法,但目前在该项目中还不可能。我会检查一下你提到的磁盘!再次感谢