Probleme bei der Ereignisbehandlung analysieren

Problem

Sie sehen den folgenden Fehler in der Datei logs/crx/error.log:

*WARN * ObservationDispatcher: Mehr als 200000 Ereignisse in der Warteschlange

Oder das System ist beim Datenimport langsam.

Lösung

Gehen Sie wie folgt vor, um das Problem zu analysieren:

  1. Erstellen Sie ein „EventConsumer“, das Ihnen die Dauer der Ausführung jedes JCR ermöglicht.
  2. Reproduzieren Sie das Problem und nehmen Sie Themenbereiche und führen Sie den Profiler aus, um Details darüber zu sammeln, welcher Code oder Inhalt das Problem verursacht.
  3. Ändern Sie den Code, um das Problem zu beheben. Bereinigen Sie den Inhalt, der das Problem verursacht oder wenden Sie sich an den AEM (CQ)-Support, wenn das Problem mit dem Produktcode zu tun zu haben scheint.

1. Erstellen Sie ein EventConsumer-Debugprotokoll

In CQ5.4/CRX2.2 oder früher:

  1. Beenden Sie CQ.
  2. Legen Sie die folgende Protokollstufe in der Datei crx-quickstart/server/runtime/0/_crx/WEB-INF/log4j.xml <logger name="org.apache.jackrabbit.core.observation.EventConsumer">
    <level value="debug" />
    </logger>
    fest
  3. Starten Sie CQ.
  4. Nun sehen Sie unter logs/crx/error.log Debug-Protokollnachrichten von org.apache.jackrabbit.core.observation.EventConsumer, die die Ausführungszeit für jedes Ereignis anzeigen.
In CQ5.5/CRX2.3 oder höher (einschließlich AEM-Versionen):
  1. Gehen Sie auf http://host:port/system/console/configMgr und melden Sie sich als Administator an.
  2. Suchen Sie die Apache Sling Logging Logger-Factory und erstellen Sie eine Instanz, indem Sie auf die Schaltfläche „+“ auf der rechten Seite der Werkskonfiguration klicken.  In diesem Schritt wird eine neue Protokolleinrichtung erstellt.
  3. Stellen Sie die Konfiguration auf folgende Einstellungen ein:
    Protokollebene: DEBUG
    Dateipfad des Protokolls: logs/eventconsumer.log
    Kategorien: org.apache.jackrabbit.core.observation.EventConsumer
  4. Jetzt können Sie in logs/eventconsumer.log Debug-Protokollmeldungen von org.apache.jackrabbit.core.observation.EventConsumer sehen, die die Ausführungszeit für jeden Ereignis-Handler zeigen.

2. Das Problem reproduzieren

Reproduzieren Sie das Problem mit Ihrer nun erstellten DEBUG-Protokolldatei, indem Sie noch einmal jegliche Aktivität versuchen, die dazu geführt haben könnte, dass die Ereignisse sich anhäufen.  Nun Thread-Zwischenspeicher nehmen und den CPU-Profiler ausführen. Dies kann dabei helfen, die Ursache der Langsamkeit zu identifizieren.

3. Ändern des Codes, um das Problem zu beheben

Sie haben DEBUG-Protokolle, Thread-Zwischenspeicher und Ausgaben vom CPU-Profiler gesammelt, sodass Sie jetzt genügend Informationen haben, um auf eine zugrundeliegende Ursache schließen zu können.  Unter [2] unten finden Sie Beispielsprotokollnachrichten, die einen lange laufenden JCR EventListener/EventConsumer zeigen.

Je nach Ergebnissen könnten Sie eines der folgenden sehen:

  1. Ein Fehler in einem benutzerdefinierten JCR EventListener - um das Problem zu lösen, optimieren Sie Ihren Code.
  2. Eine große Anhäufung von Inhalten führt dazu, dass ein benutzerdefinierter oder JCR EventListener langsam ausgeführt wird.
        Um das Problem zu beheben, löschen Sie den verwandten Inhalt, den Sie nicht mehr benötigen:
           1. Gehen Sie zu CRX Explorer: http://host:port/crx/explorer/index.jsp (/crx/index.jsp in CQ 5.4 und älteren Versionen)
           2. Öffnen Sie „Content Explorer“ und navigieren Sie zum Inhaltspfad, den Sie bereinigen möchten.
           3. Klicken Sie mit der rechten Maustaste auf den Knoten oben in der Struktur, die Sie löschen möchten, und wählen Sie „Rekursiv löschen“
           4. Deaktivieren Sie den vorläufigen Scan und starten Sie
  3. Ein Problem mit einem Out-of-the-Box-JCR-Ereignis-Listener - steht dem AEM (CQ)-Dienst zur Verfügung.

[1] Zugehörige Fehlermeldung

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] Beispiel: EventConsumer DEBUG-Log-Meldungen

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.

Weitere Informationen

Der Fehler ist in der Regel auf ein Problem mit den JCR-Ereignis-Listenern zurückzuführen. Ein bestimmter JCR-Ereignislistener könnte Ereignisse falsch behandeln oder sie aus irgendeinem Grund zu langsam verarbeiten.

Siehe hier für einige Hintergrundinformationen über JCR Event Listener.

 Adobe

Schneller und einfacher Hilfe erhalten

Neuer Benutzer?