我在Ignite引擎中将Spring引导Web应用程序用作bean。高速缓存配置如下:Ignite在高速缓存销毁后没有释放内存
<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>
现在,在这一点上,我期待的最大内存使用量是2.6 GB,因为我将堆外最大内存设置为1 GB。但是,在将数百万个对象加载到缓存后,会发生什么?
在这一点上,如果我尝试加载更多的条目到缓存中,内存使用量不断增长,证明点燃没有释放我之前销毁的缓存。
编辑
我上传我的输出http://sourceforge.net/projects/ignitetest35087485/files/沿着一个maven测试项目。正如你将会看到的那样,它会在5轮负载破坏后耗尽我的记忆。迁移空间的驱逐没有发生,点燃并未考虑offHeapMaxMemory设置。
这里有什么问题?任何帮助深表感谢。
如何销毁缓存? –
@Valentin我试过这些方法:ignite.cache(缓存).clear(),ignite.cache(缓存).destroy(),ignite.destroyCache(缓存)。这发生在ComputeTask(执行异步)内,其中ignite实例是一个自动装配的IgniteInstanceResource。 –
你最终是否内存不足?请注意,Java可能不会立即释放内存,它只会在垃圾回收过程中发生。如果您的应用程序不会因内存不足错误而失败,并且不会遇到非常长的GC暂停,那么很可能不会出现泄漏。 –