Erreurs HTTP 5xx lors du rendu des pages dans Adobe Experience Manager as a Cloud Service
Dans Adobe Experience Manager as a Cloud Service, le rendu des pages peut devenir lent ou ne plus répondre lorsque des appels HTTP externes bloquent les threads de gestion des requêtes. En cas d’augmentation du trafic, les threads bloqués peuvent entraîner un épuisement des threads et des erreurs HTTP 5xx pour les visiteurs du site. Pour résoudre ce problème, optimisez les appels HTTP externes, implémentez la mise en cache et configurez des paramètres de délai d’expiration efficaces.
Description description
Environnement
Adobe Experience Manager (AEM) as a Cloud Service (toutes les versions)
Symptômes
- Augmentation des erreurs HTTP 5xx (telles que 503 ou 504) pour les visiteurs du site
- Pages de produits lentes ou ne répondant pas, en particulier pendant les pics de trafic
- Les journaux d’application peuvent afficher des erreurs de délai d’expiration de connexion lors de l’appel de services externes
Cause
Lorsque l’application effectue des appels HTTP externes synchrones (pour les données de produit ou de SKU, par exemple) directement à partir du thread de gestion des requêtes pendant le rendu de la page, et que ces appels ne sont pas mis en cache ou n’ont pas de délais d’expiration effectifs, les threads de requête peuvent être bloqués en attendant des réponses externes lentes. En cas d’augmentation du trafic, les threads de requête disponibles peuvent s’épuiser, ce qui entraîne l’échec des nouvelles requêtes avec des erreurs HTTP 5xx.
Résolution resolution
Suivez les étapes ci-dessous pour résoudre le problème.
-
Vérifiez le code de votre application pour identifier tous les appels HTTP externes synchrones effectués pendant le rendu de la page, en particulier ceux exécutés sur les threads de traitement des requêtes.
-
Refactorisez le code pour effectuer des appels HTTP externes de manière asynchrone ou en dehors du thread de requête principal si possible.
-
Implémentez la mise en cache des données externes (telles que les informations de produit ou de SKU) pour éviter les appels répétés lors du rendu de la page. Assurez-vous que la logique d’invalidation du cache correspond à vos exigences d’actualisation des données.
-
Configurez des délais de connexion et de lecture (socket) efficaces sur tous les clients HTTP utilisés pour les appels externes. Par exemple, avec Apache HttpClient :
code language-none RequestConfig config = RequestConfig.custom() .setConnectTimeout(5000) .setSocketTimeout(5000) .build();Ajustez les valeurs de délai d’expiration en fonction de votre cas d’utilisation.
-
Surveillez l’utilisation du pool de threads de requête dans votre environnement AEM. Configurez des alertes pour les états d’attente d’E/S ou de blocage de thread élevé afin de détecter précocement l’épuisement potentiel du thread.
-
Testez votre application sous charge dans un environnement d’évaluation pour vous assurer que l’épuisement du thread ne se reproduit pas sous une augmentation des requêtes simultanées.
Après avoir implémenté ces modifications, vérifiez que le rendu des pages reste réactif et que les erreurs HTTP 5xx ne sont plus observées lors des pics de trafic.