【问题标题】:How to avoid JBoss-Cache region from getting evicted?如何避免 JBoss-Cache 区域被驱逐?
【发布时间】:2011-01-17 20:56:18
【问题描述】:

我正在尝试为仅在短时间内相关的数据创建一个 jboss 缓存。在那之后,应该丢弃数据并释放相应的内存。

缓存是这样组织的:

/my_region
    /session_1
        /datanode_1
          attribute1: value1
        /datanode_2
          attribute2: value2
    /session_2
        ...
    /session_3
        ...
    ...
    ...

我的驱逐策略配置如下:

<attribute name="EvictionPolicyClass">org.jboss.cache.eviction.LRUPolicy</attribute> 
<attribute name="EvictionPolicyConfig">
   <config>
      <attribute name="wakeUpIntervalSeconds">5</attribute>     
         <region name="/my_region">
     <attribute name="maxNodes">100</attribute>
     <attribute name="timeToLiveSeconds">1800</attribute>
        </region>
   </config>
</attribute>

这很有效:当/my_region 获得超过 100 个孩子时,最近最少使用的孩子会被驱逐,这样该区域就会缩小到 100 个孩子。

LRUPolicy 的问题是当被驱逐的节点有孩子时,they're not completely removed, but marked with jboss:internal:uninitialized: null instead。这种行为对于被缓存以避免从持久存储中获取它们的实体是有意义的,但它不适合缓存未持久且永远不会再次访问的实体。

因此,为了删除节点,我创建了 LRUPolicy 的扩展,它使用 remove 覆盖 evict。

@Override
public void evict(Fqn fqn) throws Exception {
    cache_.remove(fqn);
}

此新策略不会留下joss:internal:uninitialized: null,但会在达到maxNodes 时删除/my_region 节点。当我把LRUPolicy 放回去时,我注意到区域节点本身实际上被逐出并获得了unitialized 标记,但最近使用的100 个子节点仍然存在。

如何防止该区域本身被驱逐?有没有更好的方法可以在不分离eviction from expiration的情况下进行删除而不是驱逐?

我使用的是 jboss-cache 版本 1.3.0.SP4。

【问题讨论】:

  • 1.3.0.SP4,我会把它包含在问题中。

标签: java caching jboss jboss-cache


【解决方案1】:

你看过JBoss-Cache bugs repository吗?


编辑:

看看这个 JBoss-Cache 的 bug,它似乎很相关:

https://jira.jboss.org/jira/browse/JBCACHE-921

在 1.4.1.SP1 中修复

【讨论】:

  • 这看起来确实相关,感谢您的研究!当我尝试升级是否确实解决了问题时,我会告诉你。
  • 我更新到 1.4.1.SP3(因为这在他们的 maven 存储库中很容易获得),这确实解决了问题!所以正是那个错误导致了内存泄漏。到目前为止,看起来 1.4.1.SP3 是 1.3.1.SP4 的替代品。感谢您的研究,这让我很开心!下次我会记得在很容易看到问题是否消失时先升级库。
【解决方案2】:

您可以通过编程方式将缓存区域设置为常驻:

this.cache.getNode(fqn).setResident(true);

【讨论】:

    猜你喜欢
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-12
    • 2014-02-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多