Я использую движок Ignite в качестве компонента внутри загрузочного веб-приложения Spring. Конфигурация кэша следующая:
<bean id="ignite" class="org.apache.ignite.IgniteSpringBean">
<property name="configuration">
<bean id="ignite.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
<property name="cacheConfiguration">
<list>
<bean class="org.apache.ignite.configuration.CacheConfiguration">
<property name="atomicityMode" value="TRANSACTIONAL" />
<property name="cacheMode" value="PARTITIONED" />
<property name="backups" value="0" />
<property name="startSize" value="#{1024*16}" />
<property name="memoryMode" value="OFFHEAP_TIERED" />
<property name="offHeapMaxMemory" value="#{1 * 1024L * 1024L * 1024L}" />
<property name="swapEnabled" value="true" />
<property name="evictSynchronized" value="true" />
</bean>
</list>
</property>
<property name="swapSpaceSpi">
<bean class="org.apache.ignite.spi.swapspace.file.FileSwapSpaceSpi">
<property name="baseDirectory" value="..." />
</bean>
</property>
Вот использование памяти по умолчанию после запуска движка с кучей 0,5 ГБ:
На данный момент я ожидаю, что максимальное использование памяти составит 2,6 ГБ, поскольку я установил максимальную память вне кучи на 1 ГБ. Но вот что происходит после того, как я загружу в кеш несколько миллионов объектов!
Что еще хуже, я уничтожаю кеш, но использование памяти все еще там!
В этот момент, если я попытаюсь загрузить больше записей в кеш, использование памяти просто продолжит расти, доказывая, что ignite не освободил кеш, который я уничтожил ранее.
ИЗМЕНИТЬ
Я загрузил тестовый проект maven вместе с выводом на http://sourceforge.net/projects/ignitetest35087485/files/. Как вы увидите, он истощил мою память после 5 циклов загрузки-уничтожения. Выселение в пространство подкачки не произошло, а ignite не учитывал настройку offHeapMaxMemory.
В чем проблема? Любая помощь очень ценится.