0

Spring Boot Web アプリケーション内で Ignite エンジンを Bean として使用しています。キャッシュ構成は次のとおりです。

<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.5GB ヒープでエンジンを起動した後のデフォルトのメモリ使用量は次のとおりです。 ここに画像の説明を入力

この時点で、オフヒープの最大メモリを 1 GB に設定したため、最大メモリ使用量は 2.6 GB になると予想しています。しかし、数百万個のオブジェクトをキャッシュにロードすると、次のようになります。 ここに画像の説明を入力

さらに悪いことに、キャッシュを破棄しましたが、メモリ使用量はまだ残っています! ここに画像の説明を入力

この時点で、さらに多くのエントリをキャッシュにロードしようとすると、メモリ使用量が増加し続け、以前に破棄したキャッシュが ignite によって解放されていないことがわかります。

編集

出力とともに Maven テスト プロジェクトをhttp://sourceforge.net/projects/ignitetest35087485/files/にアップロードしました。ご覧のとおり、ロードと破棄を 5 サイクル繰り返した後、メモリが枯渇しました。スペースをスワップするためのエビクションは行われず、ignite は offHeapMaxMemory 設定を考慮しませんでした。

ここで何が問題なのですか?どんな助けでも大歓迎です。

4

1 に答える 1

0

私にとってうまくいった唯一の方法は、Cache#removeAll + Ignite#destroyCache + Ignite#createCache を呼び出すことです。これにより、新しいキャッシュを作成する前に、新しい/更新された構成で新しいキャッシュを作成し、古いオフヒープ メモリのロックを解除することができました。これにより、必要に応じてメモリの量を縮小および拡大できます。絶対最大値があることがわかっている場合。縮小する必要はありません。off-heap-max-memory (+ EvictionPolicy と ExpiryPolicy) を構成するだけで、未使用のスペースが再利用されます (off-heap-max-memory を乗り越えることはできませんが、キャッシュも縮小しません)。

于 2016-03-05T23:03:51.807 に答える