点燃堆分层不起作用
Ignite Off heap Tiered doesn't work
我正在使用 Ignite 的数据网格并想测试堆外分层模式。我在不同的机器上有 1 个服务器和 1 个客户端作为网格的一部分。以下是我创建缓存所遵循的步骤:
- 在一个节点上启动服务器。
- 在另一个节点上启动客户端(使用 Discovery spi 连接到服务器)并创建缓存和近缓存,并将 10,000 个条目加载到缓存中。
- 缓存内存模式为OFFHEAP_TIERED,堆外内存使用方法CacheConfiguration#setOffHeapMaxMemory(int size)设置为零。
- 打开 Ignite CLI(visor)并检查存储在堆外的条目数和存储在堆上的条目数。
我遇到的奇怪的事情是,甚至没有一个条目存储在堆外。遮阳板显示客户端和服务器上存储在堆上的所有条目。但是,如果我不使用近缓存,那么所有条目都存储在堆外。
我想知道这是否是遮阳板显示的统计信息有问题,或者当启用近缓存时 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);
}
}
这是 Ignite 遮阳板上命令 'cache' 的输出,它在客户端机器上 运行ning
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 |
+-------------------------------------------------------------------------------------------------------------------+
如您所见,visor 显示所有条目都在堆中,其中 none 存储在堆外。
此外,如果我从服务器创建并加载缓存并启动客户端(它什么都不做),那么所有条目都存储在堆外。
除此之外还有其他行为可能会带来更多启发。
Post上面提供的步骤,如果你启动另一个服务器节点,新的服务器节点将缓存条目存储在堆外内存中(假设设置了备份)。
当你运行客户端再次清除现有缓存并添加
再次是数据,在服务器上,部分数据在堆上,部分数据在关闭
堆.
我调查了 Ignite 炒锅,如您所见。
您可以跟踪此问题以修复 https://issues.apache.org/jira/browse/IGNITE-4662
或者不使用近缓存
我正在使用 Ignite 的数据网格并想测试堆外分层模式。我在不同的机器上有 1 个服务器和 1 个客户端作为网格的一部分。以下是我创建缓存所遵循的步骤:
- 在一个节点上启动服务器。
- 在另一个节点上启动客户端(使用 Discovery spi 连接到服务器)并创建缓存和近缓存,并将 10,000 个条目加载到缓存中。
- 缓存内存模式为OFFHEAP_TIERED,堆外内存使用方法CacheConfiguration#setOffHeapMaxMemory(int size)设置为零。
- 打开 Ignite CLI(visor)并检查存储在堆外的条目数和存储在堆上的条目数。
我遇到的奇怪的事情是,甚至没有一个条目存储在堆外。遮阳板显示客户端和服务器上存储在堆上的所有条目。但是,如果我不使用近缓存,那么所有条目都存储在堆外。
我想知道这是否是遮阳板显示的统计信息有问题,或者当启用近缓存时 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);
}
}
这是 Ignite 遮阳板上命令 'cache' 的输出,它在客户端机器上 运行ning
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 |
+-------------------------------------------------------------------------------------------------------------------+
如您所见,visor 显示所有条目都在堆中,其中 none 存储在堆外。
此外,如果我从服务器创建并加载缓存并启动客户端(它什么都不做),那么所有条目都存储在堆外。
除此之外还有其他行为可能会带来更多启发。
Post上面提供的步骤,如果你启动另一个服务器节点,新的服务器节点将缓存条目存储在堆外内存中(假设设置了备份)。
当你运行客户端再次清除现有缓存并添加 再次是数据,在服务器上,部分数据在堆上,部分数据在关闭 堆.
我调查了 Ignite 炒锅,如您所见。
您可以跟踪此问题以修复 https://issues.apache.org/jira/browse/IGNITE-4662
或者不使用近缓存