首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ehcache 3.4中的磁盘持久缓存正在使用(泄漏?)直接存储器

ehcache 3.4中的磁盘持久缓存正在使用(泄漏?)直接存储器
EN

Stack Overflow用户
提问于 2017-11-01 23:01:51
回答 1查看 934关注 0票数 3

我正在运行一个使用Ehcache 3.4.0的web应用程序。我有一个缓存配置,它定义一个简单的缺省值为1000个内存中的对象:

代码语言:javascript
复制
<cache-template name="default">
    <key-type>java.lang.Object</key-type>
    <value-type>java.lang.Object</value-type>
    <heap unit="entries">1000</heap>
</cache-template>

然后,我有一些基于磁盘的缓存,它们使用这个默认模板,但覆盖所有值(通过编程方式生成,因此它们甚至使用默认模板)如下:

代码语言:javascript
复制
<cache alias='runViewCache' uses-template='default'>
    <key-type>java.lang.String</key-type>
    <value-type>java.lang.String</value-type>
    <resources>
        <heap unit='entries'>1</heap>
        <disk unit='GB' persistent='true'>1</disk>
    </resources>
</cache>

当数据被写入基于磁盘的缓存中时,JVM将使用直接/非堆内存,并且从未释放。即使清除缓存也不会释放内存。据我所知,所使用的内存与写入基于磁盘的缓存的数据直接相关(据我所知,几乎是字节对字节)。

此缓存的权威层是org.ehcache.impl.internal.store.disk.OffHeapDiskStore.的实例。

这似乎是内存泄漏(内存被消耗,从未释放),但我绝不是配置ehcache的专家。有人能建议进行配置更改,从而导致磁盘层不使用堆外内存吗?或者,我只是完全误解了其他人可以指出的其他东西吗?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2017-11-14 13:15:14

你如何衡量“使用”?

不,磁盘层不会浪费RAM。

v3.0.0开始,Ehcache使用内存映射文件进行磁盘持久化:

将Ehcache 2.x开放源码磁盘存储端口替换为利用OF堆库和内存映射文件的端口。

这意味着Ehcache使用内存中的地址空间访问磁盘上的文件.这确实消耗了0字节的RAM。(至少是直接的。正如@已经指出的,操作系统可以决定在RAM中缓存部分文件。)

在Linux上运行时,您应该比较进程的VIRT和RES值。VIRT是进程使用的虚拟字节的数量。RES是进程使用的实际内存(RESident)字节的数量。当填充磁盘存储缓存时,VIRT应该会增加,但是RES应该保持相当稳定。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47064988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档