リビジョンクリーンアップ revision-cleanup
はじめに introduction
リポジトリを更新するたびに、コンテンツのリビジョンが作成されます。その結果、更新のたびにリポジトリのサイズが大きくなります。ディスクリソースを解放するには、古いリビジョンをクリーンアップする必要があります。これは、リポジトリが無制限に増大するのを防ぐのに重要です。このメンテナンス機能は、リビジョンクリーンアップと呼ばれます。Adobe Experience Manager(AEM)6.0 以降、オフラインルーチンとして使用可能になりました。
AEM 6.3 以降では、この機能のオンラインバージョンである「オンラインでのリビジョンクリーンアップ」が導入されました。オフラインのリビジョンクリーンアップでは AEM インスタンスをシャットダウンする必要があるのに対し、オンラインのリビジョンクリーンアップでは AEM インスタンスがオンラインの間に実行できます。オンラインのリビジョンクリーンアップはデフォルトでオンになっており、リビジョンのクリーンアップを実行する方法として推奨されます。
メモ:オンラインでのリビジョンクリーンアップの概要および使用方法について詳しくは、ビデオを参照してください。
リビジョンクリーンアップのプロセスは、見積もり、コンパクション、クリーンアップ の 3 つのフェーズで構成されます。見積もりフェーズでは、収集されるガベージの量に基づいて、次のフェーズ(コンパクション)を実行するかどうかが判断されます。コンパクションフェーズでは、未使用のコンテンツを除いて、セグメントと tar ファイルが書き換えられます。その後のクリーンアップフェーズでは、ガベージも含めて、古いセグメントが削除されます。通常、オフラインモードではより多くのスペースを再利用できます。これは、オンラインモードでは、追加のセグメントを収集しないようにする AEM の作業セットを考慮する必要があるからです。
リビジョンクリーンアップについて詳しくは、次のリンクを参照してください。
また、Oak の公式ドキュメントも参考になります。
オフラインでのリビジョンクリーンアップではなく、オンラインのリビジョンクリーンアップを使用する場合 when-to-use-online-revision-cleanup-as-opposed-to-offline-revision-cleanup
リビジョンのクリーンアップを実行する場合は、オンラインでのリビジョンクリーンアップをお勧めします。 オフラインでのリビジョンクリーンアップは、例外的な場合にのみ使用してください。例えば、新しいストレージ形式に移行する前や、アドビカスタマーケアから依頼された場合です。
オンラインでのリビジョンクリーンアップの実行方法 how-to-run-online-revision-cleanup
オンラインでのリビジョンクリーンアップは、AEM のオーサーインスタンスとパブリッシュインスタンスの両方で、1 日に 1 回自動的に実行されるようにデフォルトで設定されています。必要な操作は、ユーザーアクティビティが最も少ない時間帯に、メンテナンスウィンドウを定義することだけです。オンラインでのリビジョンクリーンアップタスクは、次のように設定します。
-
メイン AEM ウィンドウで、ツール/運営/ダッシュボード/メンテナンス に移動するか、ブラウザーで
https://serveraddress:serverport/libs/granite/operations/content/maintenance.html
を指定してください。 -
日別メンテナンスウィンドウ にマウスポインターを置き、「設定」アイコンをクリックしてください。
-
必要な値(繰り返し、開始時刻、終了時刻)を入力し、「保存」をクリックします。
または、リビジョンクリーンアップのタスクを手動で実行する場合は、次の手順を実行します。
-
ツール/運営/ダッシュボード/メンテナンス に移動するか、
https://serveraddress:serverport/libs/granite/operations/content/maintenance.html
を直接参照してください。 -
日別メンテナンスウィンドウ をクリックします。
-
リビジョンクリーンアップ のアイコンにマウスポインターを置きます。
-
「実行」をクリックします。
オフラインでのリビジョンクリーンアップ後のオンラインでのリビジョンクリーンアップの実行 running-online-revision-cleanup-after-offline-revision-cleanup
リビジョンクリーンアップのプロセスでは、古いリビジョンが世代ごとに再利用されます。つまり、リビジョンクリーンアップを実行するたびに、新しい世代が作成されてディスクに保持されます。ただし、リビジョンクリーンアップにはオフラインとオンラインの 2 種類があり、オフラインでのリビジョンクリーンアップは 1 つの世代を保持し、オンラインでのリビジョンクリーンアップは 2 つの世代を保持するという違いがあります。そのため、オフラインでのリビジョンクリーンアップを実行した 後 にオンラインでのリビジョンクリーンアップを実行した場合は、以下のようになります。
- オンラインでのリビジョンクリーンアップを初めて実行した後は、リポジトリのサイズが 2 倍になります。これは、ディスク上に 2 つの世代が保持されるからです。
- その後の実行では、新しい世代が作成されるときに一時的にリポジトリのサイズが大きくなりますが、オンラインでのリビジョンクリーンアッププロセスにより以前の世代が再利用されるので、初めて実行した後のサイズで落ち着きます。
また、コミットの種類と数に応じて、各世代のサイズが以前の世代と異なる場合があるため、最終的なサイズは実行によって異なる可能性があります。
そのため、当初予測していたたリポジトリサイズよりも、少なくとも 2 倍または 3 倍大きなディスクサイズにすることをお勧めします。
フルコンパクションモードとテールコンパクションモード full-and-tail-compaction-modes
AEM 6.5 では、オンラインでのリビジョンクリーンアッププロセスの コンパクション フェーズ用に 2 つの新しいモード が導入されています。
- フルコンパクション モードでは、リポジトリ全体のすべてのセグメントと tar ファイルが書き換えられます。そのため、後続のクリーンアップフェーズでは、リポジトリ全体で最大量のガベージを削除できます。フルコンパクションはリポジトリ全体に影響を与えるので、完了させるには大量のシステムリソースと時間が必要になります。フルコンパクションは、AEM 6.3 のコンパクションフェーズに対応します。
- テールコンパクション モードでは、リポジトリ内の最新のセグメントと tar ファイルのみが書き換えられます。最新のセグメントと tar ファイルは、フルコンパクションまたはテールコンパクションが最後に実行された後に追加されたものです。そのため、後続のクリーンアップフェーズでは、リポジトリの最新の部分に含まれるガベージのみを削除できます。テールコンパクションはリポジトリの一部にのみ影響するので、完了に必要なシステムリソースと時間がフルコンパクションよりも大幅に少なくなります。
これらのコンパクションモードでは、効率とリソース消費がトレードオフされます。テールコンパクションは効果が低いものの、通常のシステム運用に対する影響も少なくなります。一方、フルコンパクションはより効果的ですが、通常のシステム運用に大きな影響を与えます。
また、AEM 6.5 では、コンパクション時のより効率的なコンテンツの重複除外メカニズムが導入されました。これにより、リポジトリのディスク上のフットプリントがさらに削減されます。
次の 2 つの図は、AEM 6.3 と比較した AEM 6.5 の平均実行時間とディスク上の平均フットプリントの減少を示す社内ラボでのテスト結果を示しています。
フルコンパクションおよびテールコンパクションの設定方法 how-to-configure-full-and-tail-compaction
デフォルト設定では、テールコンパクションを平日に、フルコンパクションを日曜日に実行します。デフォルト設定は、RevisionCleanupTask
メンテナンスタスクの新しい設定値 full.gc.days
を使用することで変更できます。
full.gc.days
値を設定する場合、フルコンパクションは値で定義された日に実行され、テールコンパクションは値で定義されていない日に実行されます。例えば、フルコンパクションを日曜日に実行するように設定した場合、テールコンパクションは月曜日から土曜日に実行されます。例えば、フルコンパクションを毎日実行するように設定した場合、テールコンパクションはまったく実行されません。
また、次の点も考慮します。
- テールコンパクション は効果が低いものの、通常のシステム運用に対する影響が少ない。そのため、営業日に実行することが想定されている。
- フルコンパクション はより効果的なものの、通常のシステム運用に大きな影響を与える。そのため、営業日以外に使用することが想定されている。
- テールコンパクションとフルコンパクションはいずれも、ピーク時を避けて実行するようにスケジュールする必要がある。
トラブルシューティング troubleshooting
新しいコンパクションモードを使用する場合は、次の点に注意してください。
- 入出力(I/O)アクティビティ(I/O 操作、CPU の I/O 待機 、コミットキューサイズなど)を監視できます。これは、システムが I/O バウンドしているかどうか、アップサイジングが必要かどうかを判断するのに役立ちます。
RevisionCleanupTaskHealthCheck
は、オンラインでのリビジョンクリーンアップの全体的なヘルスステータスを示します。AEM 6.3 と同様に機能し、フルコンパクションとテールコンパクションは区別されません。- ログメッセージには、コンパクションモードについての関連情報が記録されます。例えば、オンラインでのリビジョンクリーンアップが開始されると、対応するログメッセージにコンパクションモードが表示されます。また、一部の例外的なケースでは、テールコンパクションの実行がスケジュールされていると、システムがフルコンパクションに戻り、ログメッセージにこの変更が示されることがあります。以下のログのサンプルは、コンパクションモードとテールコンパクションからフルコンパクションへの変更を示しています。
TarMK GC: running tail compaction
TarMK GC: no base state available, running full compaction instead
既知の制限事項 known-limitations
テールコンパクションモードとフルコンパクションモードを切り替えると、クリーンアッププロセスが遅れる場合があります。より正確には、フルコンパクションの後にリポジトリは増大します(2 倍のサイズ)。リポジトリがフルコンパクション前のサイズより小さくなると、余分なスペースは後続のテールコンパクションで再利用されます。メンテナンスタスクの並列実行も避ける必要があります。
最初に予測したリポジトリサイズよりも少なくとも 2 倍または 3 倍大きなディスクサイズにすることをお勧めします。
オンラインでのリビジョンクリーンアップに関するよくある質問 online-revision-cleanup-frequently-asked-questions
AEM 6.5 のアップグレードに関する考慮事項 aem-upgrade-considerations
Oak Segment Tar への移行 migrating-to-oak-segment-tar
オンラインでのリビジョンクリーンアップの実行 running-online-revision-cleanup
オンラインでのリビジョンクリーンアップの監視 monitoring-online-revision-cleanup
オンラインでのリビジョンクリーンアップのトラブルシューティング troubleshooting-online-revision-cleanup
エラーメッセージに基づくトラブルシューティング troubleshooting-based-on-error-messages
オンラインでのリビジョンクリーンアッププロセス中に問題が発生した場合、詳細な error.log が生成されます。次の一覧では、最も一般的なメッセージを説明し、解決策を提供します。
オフラインでのリビジョンクリーンアップの実行方法 how-to-run-offline-revision-cleanup
Adobe は、リビジョンクリーンアップを実行するための Oak-run というツールを提供しています。このツールは以下のページでダウンロードできます。
https://repo1.maven.org/maven2/org/apache/jackrabbit/oak-run/
このツールは、手動で実行してリポジトリをコンパクションできる実行可能な jar です。このプロセスは、ツールを正しく実行するためにリポジトリをシャットダウンする必要があるので、オフラインでのリビジョンクリーンアップと呼ばれます。メンテナンスウィンドウに従って、クリーンアップを計画してください。
クリーンアッププロセスのパフォーマンスを高める方法のヒントについては、オフラインでのリビジョンクリーンアップのパフォーマンスの向上を参照してください。
-
常に AEM インスタンスの最新のバックアップがあることを確認してください。
AEM をシャットダウンします。
-
(オプション)ツールを使用して古いチェックポイントを検索します。
code language-xml java -jar oak-run.jar checkpoints install-folder/crx-quickstart/repository/segmentstore
-
(オプション)次に、未参照のチェックポイントを削除します。
code language-xml java -jar oak-run.jar checkpoints install-folder/crx-quickstart/repository/segmentstore rm-unreferenced
-
コンパクションを実行し、完了するまで待ちます。
code language-xml java -jar -Dsun.arch.data.model=32 oak-run.jar compact install-folder/crx-quickstart/repository/segmentstore
オフラインでのリビジョンクリーンアップのパフォーマンスの向上 increasing-the-performance-of-offline-revision-cleanup
Oak-run ツールには、リビジョンクリーンアッププロセスのパフォーマンスを向上させ、メンテナンスウィンドウをできる限り最小限に抑えるための機能がいくつか導入されています。
このリストには、以下に示すいくつかのコマンドラインパラメーターが含まれています。
-
-mmap。 これは true または false に設定します。true に設定した場合は、メモリマップアクセスが使用されます。false に設定した場合は、ファイルアクセスが使用されます。指定されていない場合は、64 ビットシステムではメモリマップアクセスが使用され、32 ビットシステムではファイルアクセスが使用されます。Windows では通常のファイルアクセスが常に適用され、このオプションは無視されます。このパラメーターは、-Dtar.memoryMapped パラメーターを置き換えたものです。
-
-Dupdate.limit。ディスクへの一時的なトランザクションのフラッシュのしきい値を定義します。デフォルト値は 10000 です。
-
-Dcompress-interval。現在のマップを圧縮するまで保持する、コンパクションマップのエントリ数です。デフォルトは 1000000 です。十分なヒープメモリが使用可能な場合、スループットを高めるためにはこの値をさらに大きくする必要があります。このパラメーターは Oak バージョン 1.6 で削除されており、効果はありません。
-
-Dcompaction-progress-log。ログに記録されるコンパクションされたノードの数です。デフォルト値は 150000 です。これは、最初の 150000 個のコンパクションされたノードが操作中にログに記録されることを意味します。これは、以下で説明する次のパラメーターと組み合わせて使用します。
-
-Dtar.PersistCompactionMap。 コンパクションマップを保持するためにヒープメモリの代わりにディスク領域を使用するには、このパラメーターを true に設定します。oak-run ツールの バージョン 1.4 以上が必要です。詳しくは、オフラインでのリビジョンクリーンアップに関するよくある質問の節の質問 3 を参照してください。このパラメーターは Oak バージョン 1.6 で削除されており、効果はありません。
-
–force. コンパクションを強制的に実行し、一致しないセグメントストアバージョンは無視されます。
--force
パラメーターを使用すると、セグメントストアが、古い Oak バージョンとは互換性のない最新バージョンにアップグレードされます。また、ダウングレードが不可能であることも考慮します。通常、これらのパラメーターは、使い方に関する知識がある場合にのみ慎重に使用してください。使用中のパラメーターの例を次に示します。
java -Dupdate.limit=10000 -Dcompaction-progress-log=150000 -Dlogback.configurationFile=logback.xml -Xmx8g -jar oak-run-*.jar checkpoints <repository>
リビジョンクリーンアップをトリガーするその他の方法 additional-methods-of-triggering-revision-cleanup
上記の方法に加えて、次のように JMX コンソールを使用して、リビジョンのクリーンアップメカニズムをトリガーすることもできます。
- http://localhost:4502/system/console/jmx にアクセスして JMX コンソールを開きます。
- RevisionGarbageCollection MBean をクリックします。
- 次のウィンドウで、startRevisionGC() をクリックし、起動 して、リビジョンのガベージコレクションジョブを開始します。