Jhipsterプロジェクトがあり、いくつかのエンティティを追加しました。
次の警告メッセージが原因で、サービスが非常に遅くなっています。
オブジェクトグラフのサイズを計算しようとしたときに、設定された制限である1.000オブジェクト参照に達しました。サイジング操作を続行すると、パフォーマンスが大幅に低下する可能性があります。これは、CacheMangerまたはCache <sizeOfPolicy>要素のmaxDepthExceededBehaviorを「abort」に設定するか、@ IgnoreSizeOfアノテーションを使用してストップポイントを追加することで回避できます。構成された制限でパフォーマンスの低下が問題にならない場合は、CacheManagerまたはCache <sizeOfPolicy>要素のmaxDepth属性を使用して制限値を上げます。詳細については、Ehcache構成のドキュメントを参照してください。
この制限を増やすため、またはプロジェクトのキャッシュをキャンセルするために何を変更できますか?
これが Ehcacheの公式ドキュメント がキャッシュされたエントリのサイズ設定について述べていることです:
メモリが制限されたキャッシュに配置された要素では、メモリサイズが測定されます。キャッシュに追加されたElementインスタンス全体が測定されます。これには、キーと値、およびそのインスタンスを内部データ構造に追加するためのメモリフットプリントが含まれます。キーと値はオブジェクトグラフとして測定されます。各参照が追跡され、オブジェクト参照も測定されます。これは再帰的に続きます。
共有参照は、それを参照する各クラスによって測定されます。これは誇張になります。したがって、共有参照は無視する必要があります。
キャッシュのサイズ設定には、オブジェクトグラフのトラバースが含まれます。このプロセスは、注釈で制限できます。このプロセスは、CacheManagerレベルとキャッシュレベルの両方で制御することもできます。
CacheManagerレベルで次の要素を追加することにより、ヒープ上の要素のサイズを決定するときにエンジンのサイズをどの程度深くできるかを制御します。
_<sizeOfPolicy maxDepth="100" maxDepthExceededBehavior="abort" />
_
この要素には次の属性があります。
maxDepth
は、size-ofエンジンがアクションを実行する前にアクセスできるリンクされたオブジェクトの数を制御します。 この属性は必須です。
maxDepthExceededBehavior
は、オブジェクトグラフのサイズ設定中に最大深度を超えたときに何が起こるかを指定します。このフィールドで可能な値は次のとおりです。
continue
は、size-ofエンジンに警告をログに記録させ、サイジング操作を続行させます。この属性が指定されていない場合、continue
が使用される動作です
abort
これにより、size-ofエンジンはサイズ設定を中止し、警告をログに記録し、キャッシュをメモリ使用量を正しく追跡していないものとしてマークします。この設定では、Ehcache.hasAbortedSizeOf()
はtrue
を返します
SizeOfポリシーは、キャッシュマネージャーレベル(_<ehcache>
_の直下)およびキャッシュレベル(_<cache>
_または_<defaultCache>
_の直下)で構成できます。両方が設定されている場合、キャッシュポリシーは常にキャッシュマネージャーのポリシーを上書きします。 この要素は分散キャッシュには影響しません。
resources/ehcache.xmlに次のタグを追加できます。プロパティmaxDepthExceededBehavior=abort速度低下を回避あなたのサービス。また、maxDepthを変更して制限を増やすこともできます。
<sizeOfPolicy maxDepth="1000" maxDepthExceededBehavior="abort" />