ADOBE EXPERIENCE MANAGER AS A CLOUD SERVICEでのページレンダリング中にHTTP 5xx エラーが発生する
Adobe Experience Manager as a Cloud Serviceでは、外部HTTP呼び出しがリクエスト処理スレッドをブロックすると、ページレンダリングが遅くなったり、応答しなくなる可能性があります。 トラフィックが増加すると、ブロックされたスレッドは、サイト訪問者に対してスレッドの枯渇とHTTP 5xx エラーにつながる可能性があります。 この問題を修正するには、外部HTTP呼び出しを最適化し、キャッシュを実装し、効果的なタイムアウト設定を設定します。
説明 description
環境
Adobe Experience Manager(AEM)as a Cloud Service(すべてのバージョン)
症状
- サイト訪問者のHTTP 5xx エラー(503または504など)の増加
- 製品ページの読み込みが遅い、または反応が鈍い(特にトラフィックの急増時)
- 外部サービスの呼び出し時に、アプリケーションログに接続タイムアウトエラーが表示される場合があります
原因
アプリケーションがページレンダリング中に、リクエスト処理スレッドから直接同期した外部HTTP呼び出し(製品やSKU データなど)を行い、これらの呼び出しがキャッシュされないか、有効なタイムアウトがない場合、外部レスポンスが遅くなるのを待ってリクエストスレッドがブロックされる可能性があります。 トラフィックが増加すると、利用可能なリクエストスレッドが使い果たされ、HTTP 5xx エラーで新しいリクエストが失敗する可能性があります。
解決策 resolution
問題を解決するには、次の手順に従います。
-
アプリケーションコードを確認して、ページレンダリング中に行われたすべての同期外部HTTP呼び出し、特にリクエスト処理スレッドで実行されたHTTP呼び出しを特定します。
-
可能な場合は、外部HTTP呼び出しを非同期またはメインリクエストスレッド外で実行するようにコードをリファクタリングします。
-
ページレンダリング中に繰り返し呼び出しを避けるために、外部データ(製品やSKU情報など)に対するキャッシュを実装します。 キャッシュ無効化ロジックがデータフレッシュ要件に一致していることを確認します。
-
外部呼び出しに使用されるすべてのHTTP クライアントで、効果的な接続と読み取り(ソケット)タイムアウトを設定します。 例えば、Apache HttpClientの場合は次のようになります。
code language-none RequestConfig config = RequestConfig.custom() .setConnectTimeout(5000) .setSocketTimeout(5000) .build();ユースケースに合わせてタイムアウト値を調整します。
-
AEM環境でのリクエストスレッドプールの使用率を監視します。 スレッドが大量にブロッキングされる可能性がある場合や、I/O待ち状態の場合にアラートを設定し、スレッドの疲労を早期に検出します。
-
ステージング環境で負荷時にアプリケーションをテストし、同時リクエストの増加の際にスレッドの枯渇が発生しないようにします。
これらの変更を実装した後、ページレンダリングが応答性を維持し、トラフィックの急増中にHTTP 5xx エラーが発生しないことを確認します。