CacheEntryCollector キャッシュサイズが小さすぎる

問題

CQ または CRX の権限/ACL を多用した場合は、CRX 検索のパフォーマンスに影響を与える可能性があります。検索結果が CRX リポジトリ内の権限に対してフィルターされる必要があるからです。

この問題が発生する場合は、スレッドダンプを取ると、CacheEntryCollector クラスを含むスタックトレースに関連する多くのロック競合が発生することがわかります。

パフォーマンスに著しい影響を与える権限(rep:ACE ノード)がリポジトリに設定されているかどうかを確認するには、次の操作を行います:

  1. CRX Web アプリ/crxde に移動し、管理者としてログインします
  2. クリックしてツール => クエリ
  3. タイプに「XPath」を選択します
  4. クエリボックスに、次のクエリを入力します:
    //element(*,rep:ACL) order by @jcr:score
  5. 実行をクリックします

その結果、5000 を超えるノードになる場合、システムのパフォーマンスを向上させる方法の詳細については、次を参照してください。

解決策

1. まず、ACL の総数を減らすことができるか調べます。次のような役立つヒントがあります:

  • 定義された ACL を確認し、余分または不必要になっているかどうかを確認します。共有権限を含むグループを追加し、他のグループをメンバーとして割り当てることによって、多くの場合 ACL の数を減らすことができます。
  • ユーザーに対する権限/ACE を直接定義する場合、そのような権限を削除することで、使用している ACE の数を大幅に減らすことができます。次に、共有グループに代わりに設定されている権限で置き換える必要があります。

注意:CRX の ACL を表示する方法がわからない場合は、この記事を参照してください。また、上に記載されている検索 //element(*,rep:ACL) order by @jcr:score を使用して、ACL を検索することもできます。

2. ACE の総数を減らしても、まだパフォーマンスに問題がある場合は、アプリケーションコードで一般的に取得された検索結果のキャッシングレイヤーを実装できるかどうかを確認してください。

3. 最後に、ACL のキャッシュサイズを増やしてください。

  1. 最新の CRX ホットフィックスパック 2.2.0.56 またはそれ以降をインストールします(公共で利用可能な場合はパッケージシェアをチェックし、そうでなければ Daycare のチケットでリクエストします)。
  2. キャッシュサイズを変更するには次の JVM パラメーターを追加します:
    -Dorg.apache.jackrabbit.core.security.authorization.acl.CachingEntryCollector.maxsize=10000

    例えば、現在の rep:ACE ノード数が 10000 未満の場合は 10000 となります。


適用対象

CRX 2.2

アドビのロゴ

アカウントにログイン