我基于apache ignite core jar 2.7.0构建了一个缓存集群,服务器进程退出并出现OOM错误:
org.apache.ignite.logger.java.JavaLogger.error JVM will be halted immediately due to the failure: [failureCtx=FailureContext [type=CRITICAL_ERROR, err=class o.a.i.i.mem.IgniteOutOfMemoryException: Out of memory in data region [name=keywordRegion, initSize=256.0 MiB, maxSize=8.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]]
该区域配置为:
<bean class="org.apache.ignite.configuration.DataRegionConfiguration">
<property name="name" value="keywordRegion"/>
<property name="maxSize" value="#{1024L * 1024 * 1024 * 8}"/>
<property name="pageEvictionMode" value="RANDOM_2_LRU"/>
<property name="persistenceEnabled" value="false"/>
</bean>
关于错误日志中给定的3条建议:
并且我测试了一些情况,当高速缓存值大小相同时,逐出效果很好,而当它们的大小随机时,则会导致OOM。 有什么事?配置错误吗?谢谢。
编辑: 这是我的测试,最大区域大小设置为120M,OOM发生在第200个循环附近,当mega声明的行移至for循环的前面时,点燃效果很好。
IgniteCache<String, Object> keywordCache = ignite.getOrCreateCache("keyword");
for(int i=0;i<1000;i++){
int mega = new Random().nextInt(3) + 1;
keywordCache.put(UUID.randomUUID().toString(), new byte[mega * 1024 * 1024]);
System.out.println("current:"+i);
}
答案 0 :(得分:0)
这些对象大于EvictionPolicy中emptyPagesPoolSize的默认属性,因此,可能导致这种现象。您可以将以下行添加到DataRegionConfiguration中:
<property name="emptyPagesPoolSize" value="5000"/>
我已经检查了您的复制器,并且在应用此属性后可以正常工作。