我使用的是Ignite的数据网格,并希望测试off heap分层模式。我有1个服务器和1个客户端作为不同机器上网格的一部分。以下是我创建缓存的步骤:
我遇到的奇怪的事情是,甚至没有一个条目存储在堆外。遮阳板显示客户端和服务器上存储在堆上的所有条目。但是,如果我不使用近缓存,则所有条目都存储在堆外。
我想知道遮阳板显示的统计数据是否存在问题,或者启用近缓存时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 |
+-------------------------------------------------------------------------------------------------------------------+
正如您所看到的,遮阳板显示所有条目都在堆中,并且没有一个条目存储在堆中。
此外,如果我从服务器创建并加载缓存并启动客户端(它什么也不做),那么所有条目都存储在堆外。
要添加到此处,还有其他行为可能会增加亮点。
发布上面提供的步骤,如果启动另一个服务器节点,新服务器节点将缓存条目存储在关闭堆内存中(假设已设置备份)。
再次运行客户端以清除现有缓存并添加时 数据再次在服务器上,部分数据在堆上,部分数据在关闭状态 堆。
答案 0 :(得分:2)