我使用Ignite的数据网格并想测试堆堆叠模式。我有1个服务器和1个客户端作为网格在不同机器上的一部分。以下是我创建缓存时遵循的步骤:Ignite Off堆分层不起作用
- 在一个节点上启动服务器。
- 在另一个节点上启动客户端(使用Discovery spi连接到服务器)并创建一个高速缓存以及一个近高速缓存,并将10,000个条目加载到高速缓存中。
- 缓存内存模式为OFFHEAP_TIERED,使用CacheConfiguration#setOffHeapMaxMemory(int size)方法将堆内存设置为零。
- 打开Ignite CLI(遮阳板)并检查存储在堆中的条目数以及存储在堆中的条目数。
我遇到的奇怪的事情是,即使是一个单独的条目也没有存储在堆中。遮阳板显示客户端和服务器上的所有条目存储在堆上。但是,如果我不使用附近的缓存,那么所有的条目都被存储在堆外。
我想知道这是一个与遮阳板显示的统计数据有关的问题,还是启用近高速缓存时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);
}
}
这是在客户机上运行的点燃遮阳命令“缓存”的输出机器
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 |
+-------------------------------------------------------------------------------------------------------------------+
正如你所看到的遮阳板显示,所有的条目都在堆中,没有一个他们被堆放在外面。另外,如果我从服务器创建并加载缓存并启动客户端(它什么都不做),那么所有的条目都会从堆中存储下来。
为了补充说明,还有其他可能会导致更多光线的行为。
帖子上面提供,如果启动另一台服务器节点的步骤,新的服务器节点存储在离堆内存的缓存条目(假设备份设置)。
当您再次运行客户端以清除现有的缓存,然后再添加 的数据,在服务器上,部分数据是在堆和部分在关闭 堆。
你可以指定点燃的版本? – kuaw26
Ignite版本是1.7.0 –