我使用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 –