Ignite Off heap Tiered不起作用

时间:2017-01-28 07:27:50

标签: caching ignite gridgain

我使用的是Ignite的数据网格,并希望测试off heap分层模式。我有1个服务器和1个客户端作为不同机器上网格的一部分。以下是我创建缓存的步骤:

  1. 在一个节点上启动服务器。
  2. 在另一个节点上启动客户端(使用Discovery spi连接到服务器)并创建一个缓存以及近缓存,并将10,000个条目加载到缓存中。
  3. 缓存内存模式为OFFHEAP_TIERED,使用CacheConfiguration#setOffHeapMaxMemory(int size)方法将off heap memory设置为零。
  4. 打开Ignite CLI(遮阳板)并检查堆存储的条目数以及存储在堆上的条目数。
  5. 我遇到的奇怪的事情是,甚至没有一个条目存储在堆外。遮阳板显示客户端和服务器上存储在堆上的所有条目。但是,如果我不使用近缓存,则所有条目都存储在堆外。

    我想知道遮阳板显示的统计数据是否存在问题,或者启用近缓存时Ignite存储条目的行为是否有变化。

    这是我的客户端代码

    public class IgniteClient {
    
    public static void main(String[] args) {
    
        TcpDiscoveryVmIpFinder ipFinder = new TcpDiscoveryVmIpFinder();
    
        // IP has not been shown intentionally
        ipFinder.setAddresses(Arrays.asList("*.*.*.*"));
    
        TcpDiscoverySpi spi = new TcpDiscoverySpi();
    
        spi.setIpFinder(ipFinder);
    
        IgniteConfiguration icfg = new IgniteConfiguration();
    
        icfg.setMetricsUpdateFrequency(-1);
    
        icfg.setClientMode(true);
    
        Ignite grid = Ignition.start(icfg);
    
        CacheConfiguration<Integer, String> ccfg = new CacheConfiguration<Integer, String>();
    
        NearCacheConfiguration<Integer, String> ncfg = new NearCacheConfiguration<>();
    
        ccfg.setMemoryMode(CacheMemoryMode.OFFHEAP_TIERED);
    
        ccfg.setOffHeapMaxMemory(0);
    
        ccfg.setName("data");
    
        ncfg.setNearStartSize(1000);
    
        IgniteCache<Integer, String> dataCache = grid.getOrCreateCache(ccfg, ncfg);
    
        for (int i = 1; i <= 10000; i++) {
            dataCache.put(i, Integer.toString(i));
        }
    
        System.out.println("The entries in data cache are " + dataCache.size(CachePeekMode.ALL));
    
    
    }
    
    }
    

    这是我的服务器端代码

    public class IgniteMain {
     public static void main(String[] args) {
    
        IgniteConfiguration icfg = new IgniteConfiguration();
    
        icfg.setMetricsUpdateFrequency(-1);
    
        Ignite grid = Ignition.start(icfg);
    
      }
    }
    

    这是命令&#39; cache&#39;的输出。在客户端机器上运行的Ignite遮阳板上

    Time of the snapshot: 01/28/17, 18:23:41
    +===================================================================================================================+
    |  Name(@)  |    Mode     | Nodes |    Entries (Heap / Off heap)    |   Hits    |  Misses   |   Reads   |  Writes   |
    +===================================================================================================================+
    | data(@c0) | PARTITIONED | 2     | min: 10000 (10000 / 0)          | min: 0    | min: 0    | min: 0    | min: 0    |
    |           |             |       | avg: 10000.00 (10000.00 / 0.00) | avg: 0.00 | avg: 0.00 | avg: 0.00 | avg: 0.00 |
    |           |             |       | max: 10000 (10000 / 0)          | max: 0    | max: 0    | max: 0    | max: 0    |
    +-------------------------------------------------------------------------------------------------------------------+
    

    正如您所看到的,遮阳板显示所有条目都在堆中,并且没有一个条目存储在堆中。

    此外,如果我从服务器创建并加载缓存并启动客户端(它什么也不做),那么所有条目都存储在堆外。

    要添加到此处,还有其他行为可能会增加亮点。

    1. 发布上面提供的步骤,如果启动另一个服务器节点,新服务器节点将缓存条目存储在关闭堆内存中(假设已设置备份)。

    2. 再次运行客户端以清除现有缓存并添加时 数据再次在服务器上,部分数据在堆上,部分数据在关闭状态 堆。

1 个答案:

答案 0 :(得分:2)

如你所见,我以这种方式调查并点燃了火焰。

您可以针对修复https://issues.apache.org/jira/browse/IGNITE-4662

跟踪此问题

或者不使用近缓存