web-dev-qa-db-ja.com

オブジェクトグラフのサイズを計算しようとしたときに、設定された1.000オブジェクト参照の制限に達しました

Jhipsterプロジェクトがあり、いくつかのエンティティを追加しました。
次の警告メッセージが原因で、サービスが非常に遅くなっています。

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

この制限を増やすため、またはプロジェクトのキャッシュをキャンセルするために何を変更できますか?

12
Vítor Nóbrega

これが 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>_の直下)で構成できます。両方が設定されている場合、キャッシュポリシーは常にキャッシュマネージャーのポリシーを上書きします。 この要素は分散キャッシュには影響しません。

5

resources/ehcache.xmlに次のタグを追加できます。プロパティmaxDepthExceededBehavior=abort速度低下を回避あなたのサービス。また、maxDepthを変更して制限を増やすこともできます。

<sizeOfPolicy maxDepth="1000" maxDepthExceededBehavior="abort" />
4
Alireza Hanifi