5

アプリケーションでテラコッタで ehcache を使用しています。テラコッタで ehcache を使用すると、応答時間が 700 倍に増加しました。テラコッタがオブジェクトのサイズを測定するのに時間がかかっていると思います。警告が表示されます。

net.sf.ehcache.pool.sizeof.ObjectGraphWalker checkMaxDepth 警告: オブジェクト グラフのサイズを計算しようとしているときに、1,000 個のオブジェクト参照の構成された制限に達しました。サイジング操作を続行すると、パフォーマンスが大幅に低下する可能性があります。これは、CacheManger または Cache 要素の maxDepthExceededBehavior を「中止」に設定するか、@IgnoreSizeOf アノテーションを使用して停止ポイントを追加することで回避できます。構成された制限でパフォーマンスの低下が問題にならない場合は、CacheManager またはキャッシュ要素の maxDepth 属性を使用して制限値を上げます。詳細については、Ehcache 構成ドキュメントを参照してください。

クラスで @IgnoreSizeOf アノテーションを使用すると、応答時間が大幅に短縮されました。私の質問は、 @IgnoreSizeOf アノテーションを使用することには欠点があります。それが使用されているものと、アプリケーションの応答時間を短縮する方法について助けてください. 前もって感謝します。

4

1 に答える 1

7

この注釈は Terracotta クラスタリングとは関係ありません。この件に関する他の質問を投稿したと思います。

@IgnoreSizeOf アノテーションには、キャッシュ内のエントリのメモリ フットプリントを測定する sizeOfEngine があり、キャッシュされたエントリのアノテーション付きクラス (またはパッケージ全体) またはサブグラフ (アノテーション付きフィールド) のインスタンスを無視します。

したがって、キャッシュするオブジェクト グラフに「共有」サブグラフがある場合は、そのグラフが注釈で始まるフィールドに注釈を付けます。すべてを無視すると、もサイズ変更されず、maxBytesLocalHeap 設定にはセマンティックがありません (最終的には OOME に苦しむことになります)。

アノテーションを適切に使用するには、キャッシュしているオブジェクト グラフを理解する必要があります。詳細については、 http://ehcache.org/documentation/configuration/cache-size#built-in-sizing-computation-and-enforcementを参照してください。

さて、あなたが見ているパフォーマンスの問題に対して、maxBytesLocalHeap 設定の有無にかかわらずテストし、問題を特定するためにクラスタリングの有無にかかわらずテストすることをお勧めします。しかし、予想以上にキャッシュしているのではないかと思います。その結果、大きな男性のフットプリントが発生し、データのオーバーヘッドクラスタリングが発生します...

于 2012-11-12T22:00:02.263 に答える