Analyse des problèmes du gestionnaire d’événements

Problème

Le message d’erreur suivant s’affiche dans le fichier logs/crx/error.log :

*WARN * ObservationDispatcher : plus de 200 000 événements dans la file d'attente

Ou encore : le système est lent lors de l’importation de données.

Solution

Pour analyser le problème, procédez comme suit :

  1. Créez un débogage EventConsumer qui vous donne le timing de l’exécution de chaque écouteur d’événement JCR.
  2. Reproduisez le problème, prenez les images mémoire de threads, puis exécutez le profileur pour collecter les détails du code ou du contenu à l'origine du problème.
  3. Modifiez votre code pour résoudre le problème, nettoyez le contenu à l'origine du problème ou contactez l'assistance AEM (CQ) si le problème semble provenir du code produit.

1. Créez un journal de débogage EventConsumer.

Dans la version CQ5.4/CRX2.2 ou antérieure :

  1. Arrêtez CQ.
  2. Définissez le niveau de journalisation suivant dans le fichier crx-quickstart/server/runtime/0/_crx/WEB-INF/log4j.xml <logger name="org.apache.jackrabbit.core.observation.EventConsumer">
    <level value="debug" />
    </logger>
    .
  3. Démarrez CQ.
  4. Maintenant, dans logs/crx/error.log, vous voyez les messages du journal de débogage de org.apache.jackrabbit.core.observation.EventConsumer indiquant la durée d'exécution de chaque gestionnaire d'événements.
Dans CQ5.5/CRX2.3 ou version ultérieure (y compris les versions AEM) :
  1. Accédez à http://host:port/system/console/configMgr et connectez-vous en tant qu'admin.
  2. Recherchez la fabrique de journaux de journalisation Apache Sling et créez une instance en cliquant sur le bouton + à droite de la configuration de la fabrique.  Cette étape crée un nouveau journal de journalisation.
  3. Définissez la configuration avec ces paramètres :
    Niveau de journalisation : DEBUG
    Chemin d'accès du fichier journal : logs/eventconsumer.log
    Catégories : org.apache.jackrabbit.core.observation.EventConsumer
  4. Maintenant, dans logs/eventconsumer.log, vous voyez les messages du journal de débogage de org.apache.jackrabbit.core.observation.EventConsumer indiquant la durée d'exécution de chaque gestionnaire d'événements.

2. Reproduisez le problème.

Maintenant que vous disposez d’un fichier journal de débogage, reconfigurez le problème en réessayant toute activité qui semblait provoquer l’accumulation des événements.  Maintenant, prenez des images mémoire de threads et exécutez le profileur du CPU pour identifier ce qui cause le ralentissement.

3. Modifiez le code pour résoudre le problème.

Vous avez collecté des journaux de déboggage, des images mémoire de thread et la sortie du profileur de CPU, donc vous avez désormais assez d’informations pour en déduire la cause racine.  Voir [2] ci-dessous un échantillon de messages de journal montrant une exécution longue JCR EventListener / EventConsumer.

Sur la base des résultats, vous pouvez voir l'un des éléments suivants :

  1. Un bogue dans un enregistreur d'événements JCR EventListener - pour résoudre le problème, optimisez votre code.
  2. Une grande accumulation de contenu entraînant l'exécution lente d'un JCR EventListener personnalisé ou prêt à l'emploi.
        Pour résoudre le problème, supprimez le contenu associé dont vous n’avez plus besoin :
           1. Accédez à CRX Explorer http://host:port/crx/explorer/index.jsp (/crx/index.jsp dans CQ 5.4 et versions antérieures)
           2. Ouvrez « Content Explorer » et accédez au chemin de contenu que vous souhaitez nettoyer.
           3. Cliquez avec le bouton droit sur le nœud en haut de l'arborescence que vous souhaitez supprimer et sélectionnez "Supprimer récursivement"
           4. Désactivez l'analyse préliminaire et exécutez
  3. Un problème avec un auditeur d’événement JCR prêt à l’emploi - contactez le support AEM (CQ) pour obtenir de l’aide.

[1] Message d'erreur associé

07.04.2010 11:05:24 *WARN * ObservationDispatcher: More than 200000 events in the queue (ObservationDispatcher.java, line 228)
java.lang.Exception: Stack Trace
at org.apache.jackrabbit.core.observation.ObservationDispatcher.dispatchEvents(ObservationDispatcher.java:228)
at org.apache.jackrabbit.core.observation.EventStateCollection.dispatch(EventStateCollection.java:465)
at org.apache.jackrabbit.core.state.SharedItemStateManager$Update.end(SharedItemStateManager.java:763)
at org.apache.jackrabbit.core.state.SharedItemStateManager.update(SharedItemStateManager.java:1109)
at org.apache.jackrabbit.core.state.LocalItemStateManager.update(LocalItemStateManager.java:351)
at org.apache.jackrabbit.core.state.XAItemStateManager.update(XAItemStateManager.java:354)
at org.apache.jackrabbit.core.state.LocalItemStateManager.update(LocalItemStateManager.java:326)
at org.apache.jackrabbit.core.state.SessionItemStateManager.update(SessionItemStateManager.java:331)
at org.apache.jackrabbit.core.ItemImpl.save(ItemImpl.java:1124)
at org.apache.jackrabbit.core.SessionImpl.save(SessionImpl.java:919)
at com.day.jcr.vault.fs.io.AutoSave.save(AutoSave.java:114)
at com.day.jcr.vault.fs.io.Importer.commit(Importer.java:677)

[2] Exemples de messages de journal EventConsumer DEBUG

25.11.2013 00:00:11.115 *DEBUG* [ObservationManager] org.apache.jackrabbit.core.observation.EventConsumer listener com.day.cq.rewriter.linkchecker.impl.LinkInfoStorageImpl processed events in 15250 ms.
25.11.2013 00:01:26.859 *DEBUG* [ObservationManager] org.apache.jackrabbit.core.observation.EventConsumer listener com.day.cq.rewriter.linkchecker.impl.LinkInfoStorageImpl processed events in 74077 ms.
25.11.2013 00:02:30.569 *DEBUG* [ObservationManager] org.apache.jackrabbit.core.observation.EventConsumer listener com.day.cq.rewriter.linkchecker.impl.LinkInfoStorageImpl processed events in 49786 ms.

Informations supplémentaires

L'erreur est généralement due à un problème avec les écouteurs d'événement JCR. Un écouteur d'événement JCR particulier peut gérer des événements de manière incorrecte ou les traiter trop lentement pour une raison quelconque.

Voir ici pour des informations générales sur les auditeurs d’événements JCR.

 Adobe

Recevez de l’aide plus rapidement et plus facilement

Nouvel utilisateur ?