主な質問は、ehcahce 2.6.2 が ehcache 構成に基づいて期限切れの要素の削除を行うかどうかです。または、プログラムで削除する必要がありますか?
ドキュメントのさまざまな部分 (データの寿命とキャッシュのサイズ設定) を読んだ後、TTI/TTL と CacheManager レベル maxBytesLocalHeap=1024m を使用するように現在の構成を設定しました。これを設定した後、ehcache はキャッシュに最大 1Gb のヒープ スペースしか使用しないと予想しますが、テスト (および製品) から、JVM ヒープがいっぱいになることが一貫してわかります (この場合は 2GB)。
Ehcache は、設定した maxBytesLcoalHeap 設定を尊重していないようです。もちろん、この設定が実際に何をしているのかを私が(おそらく)理解していない場合を除きます。
管理者からのメモ:
このテスト中、maxBytesLocalHeap 値は 1024m で、キャッシュ エントリとキャッシュ管理プール全体の合計 1GB への参照が制限されているはずです。8 つの個別のキャッシュは、1024m の一部を使用するように構成されました。ヒープ使用率は、2 GB の最大ヒープ サイズまで着実に上昇しました。そこに到達すると、ガベージ コレクションに時間がかかり、応答時間が低下しました。テストが終了した後、最大ヒープ サイズは減少しませんでした。実際、テスト終了から約 30 時間後、CacheManagement ページを介してすべてのキャッシュ エントリをクリアし、JVM を一晩安定させましたが、ヒープはまだ 2GB にコミットされています。旧世代のスペースの使用はフラットで、余裕がありません。キャッシュ エントリをクリアした後、ヤング ジェネレーション スペースの使用率が低下しました。
あなたの助けと指導に感謝します!
更新しました
えっち設定
<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
<cache name="storeCache"
maxElementsInMemory="2500"
memoryStoreEvictionPolicy="LFU"
eternal="false"
timeToLiveSeconds="86400"
statistics="true">
<persistence strategy="none" />
</cache>
<cache name="courseCache"
maxElementsInMemory="100000"
memoryStoreEvictionPolicy="LFU"
eternal="false"
timeToLiveSeconds="43200"
statistics="true">
<persistence strategy="none" />
</cache>
<cache name="mtcIdCache"
maxElementsInMemory="500000"
memoryStoreEvictionPolicy="LFU"
eternal="false"
timeToLiveSeconds="3600"
statistics="true">
<persistence strategy="none" />
</cache>
<cache name="catentryCache"
maxElementsInMemory="500000"
memoryStoreEvictionPolicy="LFU"
eternal="false"
timeToLiveSeconds="3600"
statistics="true">
<persistence strategy="none" />
</cache>
<cache name="priceCache"
maxElementsInMemory="500000"
memoryStoreEvictionPolicy="LFU"
eternal="false"
timeToLiveSeconds="300"
statistics="true">
<persistence strategy="none" />
</cache>
<cache name="inventoryCache"
maxElementsInMemory="500000"
memoryStoreEvictionPolicy="LFU"
eternal="false"
timeToLiveSeconds="300"
statistics="true">
<persistence strategy="none" />
</cache>
<cache name="attributeCache"
maxElementsInMemory="500000"
memoryStoreEvictionPolicy="LFU"
eternal="false"
timeToLiveSeconds="300"
statistics="true">
<persistence strategy="none" />
</cache>
<cache name="partnerCache"
maxElementsInMemory="10000"
memoryStoreEvictionPolicy="LFU"
eternal="false"
timeToLiveSeconds="86400"
statistics="true">
<persistence strategy="none" />
</cache>
</ehcache>
** 2回目の更新 **
これは、管理者がヒープ使用率について述べていることです
この耐久性テストに関連して、websvc01 JVM の 2 つのメモリ スナップショットを取得しました。これらは、09/09 月曜日 @ 10:10:59 および 10 年 9 月火曜日 @ 10:46:48 に dynaTrace で入手できます。両方のスナップショットは、文字列オブジェクトの値をキャプチャする Deep Memory Leak Analysis スナップショットです。
このテスト中、maxBytesLocalHeap 値は 1024m で、キャッシュ エントリとキャッシュ管理プール全体の合計 1GB への参照が制限されているはずです。8 つの個別のキャッシュは、1024m の一部を使用するように構成されました。ヒープ使用率は、2 GB の最大ヒープ サイズまで着実に上昇しました。そこに到達すると、ガベージ コレクションに時間がかかり、応答時間が低下しました。テストが終了した後、最大ヒープ サイズは減少しませんでした。実際、テスト終了から約 30 時間後、CacheManagement ページを介してすべてのキャッシュ エントリをクリアし、JVM を一晩安定させましたが、ヒープはまだ 2GB にコミットされています。旧世代のスペースの使用はフラットで、余裕がありません。キャッシュ エントリをクリアした後、ヤング ジェネレーション スペースの使用率が低下しました。
アップデート:
返信ありがとうございます。この質問をしばらく更新できなかったことをお詫びします。
DynaTrace を使用して、これが Spring Integration の問題であると判断できました。具体的には、SimpleMessageStore がオブジェクトを保持していっぱいになっているようです。
ドキュメントを読むと、 MessageReaperを使用する必要があるようですが、これを構成に含めた後でも同じ問題が発生します。代わりに、SimpleMessageStore の Capacity 設定を確認する必要がありますか?