【问题标题】:Apache Ignite Eviction broken in 2.x, but works fine in 1.9Apache Ignite Eviction 在 2.x 中损坏,但在 1.9 中工作正常
【发布时间】:2019-07-08 16:22:29
【问题描述】:

我尝试了 Ignite 2.0 和 2.3 来验证简单的缓存驱逐。但是观察到它已经坏了,但是如果我恢复到 1.9,它就可以正常工作了。

这是我在 2.x 中的代码

    CacheConfiguration cc = new CacheConfiguration();

    cc.setName("mycache");
    cc.setCacheMode(CacheMode.PARTITIONED);
    cc.setOnheapCacheEnabled(true);
    cc.setEvictionPolicy(new LruEvictionPolicy(5));

    IgniteConfiguration cfg = new IgniteConfiguration();
    cfg.setCacheConfiguration(cc);

    Ignite ignite = Ignition.start(cfg);

    IgniteCache<String,String> cache = ignite.getOrCreateCache(cc);

    for(int  i=0;i<10;i++){
        cache.put("k"+i,"val-"+i);
    }

    Thread.sleep(1000);

    for(int  i=0;i<10;i++) {
        System.out.println(cache.get("k"+i));
    }

    System.out.println("============================== " + cache.metrics().getSize());

输出打印所有 10 个缓存条目,但它应该只打印从缓存键 key5 到 k10 的值。因为我的 LRU 最大尺寸=5。但是,如果我将 ignite 版本更改为 1.9,一切都会按预期工作。

这是一个已知问题吗?还是我做错了什么。

【问题讨论】:

    标签: java caching ignite


    【解决方案1】:

    从 2.0 版开始,Ignite 使用堆外内存。它按页面分配内存,当可用空间用完时,它们可能会被驱逐。你可以在这里找到这个机制的描述:https://apacheignite.readme.io/docs/evictions#section-off-heap-memory

    因此,您可以告诉 Ignite 开始从某个特定数据区域逐出页面,例如,当 90% 的内存被占用时。

    您启用了另一种驱逐策略,即从 Java 堆中驱逐。它不会影响存储在堆外空间中的数据。堆空间不是替代品,它只是堆外内存之上的额外数据层。以下是有关 Java 堆回收策略的文档:https://apacheignite.readme.io/docs/evictions#section-java-heap-cache

    【讨论】:

    • 这是否意味着,点燃 2.x,它总是使用非堆(我们不能禁用它)并且 isOnHeapEnabled 只是将堆缓存复制到 java 堆空间?
    • 根据您的回答,堆外空间不会受到堆上驱逐策略的影响。有道理。但我观察到,在同一个示例中,创建最大条目如 10000 并开始放置 10KB 条目。并且 Ignite 在达到其最大条目后会抱怨 OutOfMemory 错误。如果它真的从堆中逐出,不管堆外的条目如何,它都不应该 OOM 对吧?
    • 你观察到什么样的OOM?如果是java.lang.OutOfMemory,请检查JVM 的Xmx 参数并相应地设置LruEvictionPolicy.setMaxMemorySize()。如果是IgniteOutOfMemoryException,则需要增加对应数据区域的maxSize属性(看起来你的缓存使用了默认数据区域)请看这里:apacheignite.readme.io/docs/…
    • 似乎存储在堆上不再是一个选项,但从 2.x 开始,它也可以存储在堆上。无论如何,Ignite 都会将缓存条目存储在堆外。谢谢你的解释。
    • 在堆外,我可以禁用写入磁盘(在驱逐时)。我只想从堆缓存中自行驱逐,而不需要任何进一步的分层存储。
    猜你喜欢
    • 2017-01-19
    • 2011-12-24
    • 1970-01-01
    • 2017-03-12
    • 1970-01-01
    • 2015-11-10
    • 1970-01-01
    • 1970-01-01
    • 2016-02-09
    相关资源
    最近更新 更多