Hi! Looks like page eviction works incorrectly, when you try to insert a lot of data at once in a batch. I created a JIRA ticket for this issue: https://issues.apache.org/jira/browse/IGNITE-8917 Thank you for the report!
When I replaced putAll with singular puts, Ignite stopped failing with IgniteOOM. You can use this approach as a workaround. Denis вт, 3 июл. 2018 г. в 12:11, Michaelikus <[email protected]>: > Hiii everybody! > > There is a cluster 2.4 consists of 4 nodes with following data region and > cache > > *DATA REGION:* > <property name="dataStorageConfiguration"> > <bean > class="org.apache.ignite.configuration.DataStorageConfiguration"> > <property name="defaultDataRegionConfiguration"> > <bean > class="org.apache.ignite.configuration.DataRegionConfiguration"> > <property name="name" value="NotPersistRegion"/> > <property name="maxSize" > value="#{1L*1024*1024*1024}"/> > <property name="pageEvictionMode" > value="RANDOM_2_LRU"/> > <property name="metricsEnabled" value="true"/> > <property name="persistenceEnabled" value="false"/> > </bean> > </property> > > <property name="metricsEnabled" value="true"/> > <property name="alwaysWriteFullPages" value="true"/> > <property name="walCompactionEnabled" value="true"/> > </bean> > </property> > > > *CACHE:* > <property name="cacheConfiguration"> > <list> > <bean > class="org.apache.ignite.configuration.CacheConfiguration"> > <property name="name" > value="InstagramUserId2UserName"/> > <property name="cacheMode" value="PARTITIONED"/> > <property name="atomicityMode" value="ATOMIC"/> > <property name="partitionLossPolicy" > value="READ_WRITE_SAFE"/> > <property name="copyOnRead" value="false"/> > <property name="dataRegionName" > value="NotPersistRegion"/> > <property name="statisticsEnabled" value="true"/> > <property name="managementEnabled" value="true"/> > <property name="backups" value="1"/> > <property name="readFromBackup" value="true"/> > </bean> > </list> > </property> > > > *Java class which writes to cache:* > > private static void putAllGetAll(IgniteCache<Integer, String> cache) > throws IgniteException { > System.out.println(); > System.out.println(">>> Starting putAll-getAll example."); > > final int keyCnt = 100000; > > // Create batch. > for (int bulkNum = 00; bulkNum < 1000; bulkNum++){ > Map<Integer, String> batch = new HashMap<>(); > > for (int i = 0; i < keyCnt; i++) { > batch.put(bulkNum * keyCnt + i, "bulk-" + (bulkNum) + > ".Value=" + (bulkNum * keyCnt + i)); > } > System.out.println(">>> Bulk #" + bulkNum + " - prepared."); > > // Bulk-store entries in cache. > cache.putAll(batch); > System.out.println(">>> Bulk #" + bulkNum + " - stored in > cache."); > batch.clear(); > } > } > > In parallel i've run task which read random keys from same cache: > > int keyCnt = 90000000; > while(true){ > rndKey = rndGen.nextInt(keyCnt); > randomKeyFromCache = cache.get(rndKey); > System.out.println("Got [key=" + rndKey + ", val=" + > randomKeyFromCache > + ']'); > } > > > *And error:* > > Exception in thread "main" > org.apache.ignite.cache.CachePartialUpdateException: Failed to update keys > (retry update if possible).: [23700331, 23700330, 23700332, 23700322, > 23700345, 23700351, 23700337, 23700338, 23700342, 23700300] > at > > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicAbstractUpdateFuture.onPrimaryError(GridNearAtomicAbstractUpdateFuture.java:397) > at > > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicUpdateFuture.onPrimaryResponse(GridNearAtomicUpdateFuture.java:416) > at > > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.processNearAtomicUpdateResponse(GridDhtAtomicCache.java:3073) > at > > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.access$500(GridDhtAtomicCache.java:130) > at > > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache$6.apply(GridDhtAtomicCache.java:285) > at > > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache$6.apply(GridDhtAtomicCache.java:280) > at > > org.apache.ignite.internal.processors.cache.GridCacheIoManager.processMessage(GridCacheIoManager.java:1060) > at > > org.apache.ignite.internal.processors.cache.GridCacheIoManager.onMessage0(GridCacheIoManager.java:579) > at > > org.apache.ignite.internal.processors.cache.GridCacheIoManager.handleMessage(GridCacheIoManager.java:378) > at > > org.apache.ignite.internal.processors.cache.GridCacheIoManager.handleMessage(GridCacheIoManager.java:304) > at > > org.apache.ignite.internal.processors.cache.GridCacheIoManager.access$100(GridCacheIoManager.java:99) > at > > org.apache.ignite.internal.processors.cache.GridCacheIoManager$1.onMessage(GridCacheIoManager.java:293) > at > > org.apache.ignite.internal.managers.communication.GridIoManager.invokeListener(GridIoManager.java:1555) > at > > org.apache.ignite.internal.managers.communication.GridIoManager.processRegularMessage0(GridIoManager.java:1183) > at > > org.apache.ignite.internal.managers.communication.GridIoManager.access$4200(GridIoManager.java:126) > at > > org.apache.ignite.internal.managers.communication.GridIoManager$9.run(GridIoManager.java:1090) > at > > org.apache.ignite.internal.util.StripedExecutor$Stripe.run(StripedExecutor.java:505) > at java.lang.Thread.run(Thread.java:748) > Suppressed: class org.apache.ignite.IgniteCheckedException: Failed to > update keys on primary node. > at > > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.UpdateErrors.addFailedKeys(UpdateErrors.java:124) > at > > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicUpdateResponse.addFailedKeys(GridNearAtomicUpdateResponse.java:342) > at > > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateAllAsyncInternal0(GridDhtAtomicCache.java:1785) > at > > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateAllAsyncInternal(GridDhtAtomicCache.java:1628) > at > > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.processNearAtomicUpdateRequest(GridDhtAtomicCache.java:3055) > at > > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.access$400(GridDhtAtomicCache.java:130) > at > > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache$5.apply(GridDhtAtomicCache.java:266) > at > > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache$5.apply(GridDhtAtomicCache.java:261) > ... 12 more > Suppressed: class org.apache.ignite.IgniteException: Runtime > failure > on search row: > org.apache.ignite.internal.processors.cache.tree.SearchRow@3b644991 > at > > org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree.invoke(BPlusTree.java:1630) > at > > org.apache.ignite.internal.processors.cache.IgniteCacheOffheapManagerImpl$CacheDataStoreImpl.invoke(IgniteCacheOffheapManagerImpl.java:1199) > at > > org.apache.ignite.internal.processors.cache.IgniteCacheOffheapManagerImpl.invoke(IgniteCacheOffheapManagerImpl.java:345) > at > > org.apache.ignite.internal.processors.cache.GridCacheMapEntry.innerUpdate(GridCacheMapEntry.java:1767) > at > > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateSingle(GridDhtAtomicCache.java:2420) > at > > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.update(GridDhtAtomicCache.java:1883) > at > > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateAllAsyncInternal0(GridDhtAtomicCache.java:1736) > ... 17 more > Caused by: class > org.apache.ignite.internal.mem.IgniteOutOfMemoryException: Out of memory in > data region [name=NotPersistRegion, initSize=256.0 MiB, maxSize=1.0 GiB, > persistenceEnabled=false] Try the following: > ^-- Increase maximum off-heap memory size > (DataRegionConfiguration.maxSize) > ^-- Enable Ignite persistence > (DataRegionConfiguration.persistenceEnabled) > ^-- Enable eviction or expiration policies > at > > org.apache.ignite.internal.pagemem.impl.PageMemoryNoStoreImpl.allocatePage(PageMemoryNoStoreImpl.java:298) > at > > org.apache.ignite.internal.processors.cache.persistence.freelist.AbstractFreeList.allocateDataPage(AbstractFreeList.java:465) > at > > org.apache.ignite.internal.processors.cache.persistence.freelist.AbstractFreeList.insertDataRow(AbstractFreeList.java:503) > at > > org.apache.ignite.internal.processors.cache.persistence.RowStore.addRow(RowStore.java:97) > at > > org.apache.ignite.internal.processors.cache.IgniteCacheOffheapManagerImpl$CacheDataStoreImpl.createRow(IgniteCacheOffheapManagerImpl.java:1252) > at > > org.apache.ignite.internal.processors.cache.GridCacheMapEntry$AtomicCacheUpdateClosure.update(GridCacheMapEntry.java:4857) > at > > org.apache.ignite.internal.processors.cache.GridCacheMapEntry$AtomicCacheUpdateClosure.call(GridCacheMapEntry.java:4653) > at > > org.apache.ignite.internal.processors.cache.GridCacheMapEntry$AtomicCacheUpdateClosure.call(GridCacheMapEntry.java:4367) > at > > org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree$Invoke.invokeClosure(BPlusTree.java:3051) > at > > org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree$Invoke.access$6200(BPlusTree.java:2945) > at > > org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree.invokeDown(BPlusTree.java:1711) > at > > org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree.invokeDown(BPlusTree.java:1688) > at > > org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree.invoke(BPlusTree.java:1600) > ... 23 more > > > > > -- > Sent from: http://apache-ignite-users.70518.x6.nabble.com/ >
