現在表示中:

インデックス再作成に時間がかかる

AEM の内部インデックス作成プロセスでは、コンテンツを効率的に検索できるように、リポジトリデータが収集され Oak インデックスに保存されます。例外的な状況で、このプロセスが遅くなったり、停止したりすることがあります。このページは、インデックス作成に時間がかかっているかどうかを識別し、原因を特定し、問題を解決するためのトラブルシューティングガイドの役割を果たします。

必要以上に長時間がかかっているインデックス再作成と、コンテンツの量が膨大であるために処理に時間がかかっているインデックス再作成を区別することが重要です。例えば、コンテンツのインデックス作成にかかる時間はコンテンツの量に比例するので、大規模な実稼動リポジトリのインデックスを再作成するには小規模な開発リポジトリよりも時間がかかります。

コンテンツのインデックス再作成のタイミングおよび方法について詳しくは、クエリとインデックスに関するベストプラクティスを参照してください。

最初の検出

時間がかかっているインデックス作成を最初に検出するには、IndexStats JMX MBean を確認する必要があります。影響を受ける AEM インスタンスで、次の手順を実行します。

  1. Web コンソールを開いて「JMX」タブをクリックするか、http://<host>:<port>/system/console/jmx(例えば、http://localhost:4502/system/console/jmx)に移動します。
  2. IndexStats Mbean に移動します。
  3. async」および「fulltext-async」の IndexStats MBean を開きます。
  4. 両方の MBean で、Done タイムスタンプおよび LastIndexTime タイムスタンプが現在の時刻から 45 分以内であるかどうかを確認します。
  5. いずれかの MBean で、時間値(Done または LastIndexedTime)が現在の時刻から 45 分以上前である場合は、インデックスジョブが失敗しているか、時間がかかりすぎています。  これにより、非同期インデックスが更新されません。

強制終了後にインデックス作成が一時停止する

強制終了によって、再起動後に AEM で非同期インデックス作成が最大 30 分停止し、通常は最初のインデックス再作成が完了するまでさらに 15 分かかり、合計で約 45 分が必要となります(最初の検出 の 45 分の時間枠を思い出してください)。強制終了後にインデックス作成が一時停止していることが疑われる場合は、次のことをおこなってください。
  1. 最初に、AEM インスタンスが強制的に終了した(AEM プロセスが強制的に kill された、または電源障害が発生した)後に再起動したかどうかを確認します。

    • このためには、AEM のログを参照してください。
  2. 強制終了が発生した場合、再起動後 AEM ではインデックス再作成が自動的に最大 30 分停止します。

  3. AEM で通常の非同期インデックス作成操作が再開されるまで約 45 分待ってください。

スレッドプールが過負荷になる

注意:

AEM 6.1 では、AEM 6.1 CFP 11 がインストールされていることを確認してください。

例外的な状況で、非同期インデックス作成の管理に使用されるスレッドプールが過負荷になることがあります。インデックス作成プロセスを分離するために、適当な時間でコンテンツにインデックス作成する Oak の機能に他の AEM の処理が干渉しないように、スレッドプールを設定できます。そのためには、次の手順を実行します。

  1. Apache Sling Scheduler が非同期インデックス作成に使用する、分離された新しいスレッドプールを定義します。

    • 影響を受ける AEM インスタンスで、AEM OSGi Web コンソール/OSGi/Configuration/Apache Sling Scheduler に移動するか、http://<host>:<port>/system/console/configMgr(例えば、http://localhost:4502/system/console/configMgr)に移動します。
    • 「Allowed Thread Pools」フィールドに「oak」という値でエントリを追加します。
    • 右下の「Save」をクリックして変更内容を保存します。
    chlimage_1
  2. Apache Sling Scheduler の新しいスレッドプールが登録され、Apache Sling Scheduler のステータス Web コンソールに表示されることを確認します。

    • AEM OSGi Web コンソール/Status/Sling Scheduler に移動するか、http://<host>:<port>/system/console/status-slingscheduler(例えば、http://localhost:4502/system/console/status-slingscheduler)に移動します。
    • 次のプールエントリが存在することを確認します。
      • ApacheSlingoak
      • ApacheSlingdefault
    chlimage_1

監視キューがいっぱいである

リポジトリに非常に多くの変更とコミットが短時間におこなわれた場合、監視キューがいっぱいになることによってインデックス作成が遅延することがあります。まず、監視キューがいっぱいかどうかを確認します。

  1. Web コンソールに移動して「JMX」タブをクリックするか、http://<host>:<port>/system/console/jmx(例えば、http://localhost:4502/system/console/jmx)に移動します。

  2. Oak リポジトリ統計 MBean を開き、いずれかの ObservationQueueMaxLength 値が 10,000 より大きいかどうかを確認します。

    • 通常の操作では、この最大値は(特に per second セクションでは)最終的に 0 になる必要があるので、ObservationQueueMaxLength の秒の指標が 0 であることを確認します。
    • 値が 10,000 以上で、徐々に増加する場合は、少なくとも 1 つ(あるいはそれ以上)のキューを新しい変更(コミット)が発生するのと同じ速さで処理できないことを示しています。
    • 各監視キューには制限(デフォルトは 10,000)があり、キューがこの制限に達すると処理能力が低下します。
    • MongoMK を使用している場合は、キューの長さが長くなるにつれて内部 Oak キャッシュのパフォーマンスが低下します。この相関関係は、Consolidated Cache 統計 MBean の DocChildren キャッシュの missRate が増加していることで確認できます。
  3. 許容可能な監視キュー制限を超えないようにするには、次のことをお勧めします。

動きがないインデックス再作成プロセスの識別および修正

次の 2 つの状況下において、インデックス再作成は、「完全に動きがない」と見なすことができます。
  • インデックス再作成の速度が遅く、走査されたノード数に関する大きな進捗がログファイルで報告されない。
    • 例えば、1 時間以上メッセージが出力されない場合、または進捗が非常に遅く、終了まで 1 週間以上かかる場合。
  • インデックス作成スレッドでログファイルに例外(OutOfMemoryException など)が繰り返し出力されている場合、インデックス再作成は無限ループで動かなくなっている。ログに同じ例外が繰り返し表示される場合は、Oak が同じコンテンツのインデックスを繰り返し作成しようとして、同じ問題で失敗していることを示しています。

動きがないインデックス再作成プロセスを識別および修正するには、次の手順を実行します。

  1. インデックス作成が動かない原因を識別するためには、次の情報を収集する必要があります。

     

  2. 手順 1 に示されているすべての情報を収集した後、AEM を再起動します。

    • 同時負荷が大きい場合は(監視キューのオーバーフローや類似の現象)、AEM を再起動すると問題が解決することがあります。
    • 再起動しても問題が解決しない場合は、アドビカスタマーケアに問題を提出し、手順 1 で収集したすべての情報を提供してください。

非同期のインデックス再作成を安全に中止する

インデックス再作成は、async、async-reindex および fulltext-async インデックス作成レーン(IndexStats Mbean)を使用して安全に中止(完了する前に停止)できます。詳しくは、Apache Oak ドキュメントの How to Abort Reindexing も参照してください。また、次のことを考慮に入れてください。

  • Lucene および Lucene プロパティインデックスのインデックス再作成は、これらが本来非同期であることから中止できます。
  • Oak プロパティインデックスのインデックス再作成は、インデックス再作成が PropertyIndexAsyncReindexMBean を使用して開始された場合にのみ中止できます。

インデックス再作成を安全に中止するには、次の手順に従います。

  1. 停止する必要があるインデックス再作成レーンを制御する IndexStats MBean を識別します。

    • AEM OSGi Web コンソール/メイン/JMX、または http://<host>:<port>/system/console/jmx(例えば、http://localhost:4502/system/console/jmx)に移動して、JMX コンソールから該当する IndexStats MBean に移動します。
    • 停止するインデックス再作成レーン(asyncasync-reindex または fulltext-async)に基づいて IndexStats MBean を開きます。
      • 該当するレーンを識別し、IndexStats MBean インスタンスを特定するには、Oak インデックスの「async」プロパティを確認します。「async」プロパティにはレーン名が示されています(asyncasync-reindex または fulltext-async)。
      • レーンは、AEM のインデックスマネージャにアクセスして、「非同期」列で識別することもできます。インデックスマネージャにアクセスするには、運営/診断/インデックスマネージャに移動します。
    chlimage_1
  2. 該当する IndexStats MBean で abortAndPause() コマンドを呼び出します。

  3. インデックス作成レーンの再開時にインデックス再作成が再開されないように Oak インデックス定義を適切にマークします。

    • 既存のインデックスを再作成する場合は、reindex プロパティを false に設定します。
      • /oak:index/someExistingIndex@reindex=false
    • あるいは、新規インデックスの場合は次のようにします。
      • type プロパティを無効に設定します。
        • /oak:index/someNewIndex@type=disabled
      • または、インデックス定義を完全に削除します。

    完了したら、変更をリポジトリにコミットします。

  4. 最後に、中止したインデックス作成レーンで非同期インデックス作成を再開します。

    • 手順 2 で abortAndPause() コマンドを発行した IndexStats MBean で、resume() コマンドを呼び出します。

時間のかかるインデックス再作成の回避

インデックス再作成は、処理の少ない時間(例えば、大量のコンテンツの取り込みをおこなっていない時間帯)、理想的には AEM の負荷を把握および制御できるメンテナンスウィンドウでおこなうことをお勧めします。また、インデックス再作成が他のメンテナンスアクティビティ中に実行されないようにしてください。

本作品は Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License によってライセンス許可を受けています。  Twitter™ および Facebook の投稿には、Creative Commons の規約内容は適用されません。

リーガルノーティス   |   プライバシーポリシー