IgniteOutOfMemoryException: нехватка памяти в области данных - PullRequest
0 голосов
/ 01 мая 2019

Я строю кластер кеша на основе 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 предложенных предложениях в журнале ошибок:

  1. Я хочу ограничить размер кэша до 8g;
  2. Я хочу использовать только кэш-память;
  3. 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);
    }

1 Ответ

0 голосов
/ 03 мая 2019

Эти объекты больше, чем свойство по умолчанию для emptyPagesPoolSize в EvictionPolicy, поэтому это может привести к такому поведению. Вы можете добавить эту строку в DataRegionConfiguration:

<property name="emptyPagesPoolSize" value="5000"/>

Я проверил ваш репродуктор и он работает после применения этого свойства.

...