Я строю кластер кеша на основе 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 предложенных предложениях в журнале ошибок:
- Я хочу ограничить размер кэша до 8g;
- Я хочу использовать только кэш-память;
- PageEvictionMode имеет значение RANDOM_2_LRU;
и я протестировал некоторые случаи, когда значения кэша имеют одинаковый размер, выселение работает хорошо, когда они имеют случайный размер, вызывается OOM.
В чем дело? это неправильно настроено? Спасибо.
изм:
Это мой тест, максимальный размер области установлен равным 120M, OOM произошел около 200-го цикла, когда объявленная мега строка перемещается в начало цикла for, ignite работает хорошо.
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);
}