我在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暫停,那麼很可能不會出現泄漏。 –