Analizza i problemi dell'handler di eventi

Problema

Vedi il seguente errore nel file logs/crx/error.log:

*WARN * ObservationDispatcher: More than 200000 events in the queue 

Oppure, il sistema è lento durante l'importazione dei dati.

Soluzione

Per risolvere il problema, procedi come segue:

  1. Crea un debug EventConsumer che fornisce il tempo di esecuzione di ogni ascoltatore di eventi JCR.
  2. Riproduci il problema e prendi i dump di thread ed esegui il profiler per raccogliere i dettagli del codice o contenuto che sta causando il problema.
  3. Modifica il codice per risolvere il problema, ripulisci il contenuto che sta causando il problema o contatta il supporto AEM (CQ) se il problema sembra essere correlato al codice del prodotto.

1. Crea un log di debug di EventConsumer

In CQ5.4/CRX2.2 o precedenti:

  1. Interrompi il QC.
  2. Imposta il seguente livello di log nel crx-quickstart/server/runtime/0/_crx/WEB-INF/log4j.xml <logger name="org.apache.jackrabbit.core.observation.EventConsumer">
    <level value="debug" />
    </logger>
  3. Avvia CQ.
  4. Ora, in logs/crx/error.log vedi i messaggi di log di debug da org.apache.jackrabbit.core.observation.EventConsumer che mostrano il tempo di esecuzione per ogni handler di eventi.
In CQ5.5/CRX2.3 o successive (incluse le versioni AEM):
  1. Vai su http://host:port/system/console/configMgr e accedi come amministratore.
  2. Trova la fabbrica del logger di registrazione Apache Sling e crea un'istanza facendo clic sul pulsante + a destra della configurazione di fabbrica.  Questo passaggio crea un nuovo logger di registrazione.
  3. Imposta la configurazione con queste impostazioni:
    Log Level: DEBUG
    Percorso file di log: logs/eventconsumer.log
    Categorie: org.apache.jackrabbit.core.observation.EventConsumer
  4. Ora nei logs/eventconsumer.log si vedono i messaggi di log di debug da org.apache.jackrabbit.core.observation.EventConsumer che mostrano il tempo di esecuzione per ogni handler di eventi.

2. Riproduci il problema

Ora che disponi di un file di log di debug, riproduci il problema riprovando qualsiasi attività che sembrava causare l'accumulo degli eventi.  Ora prendi i dump di thread ed esegui il profiler CPU per identificare le cause della lentezza.

3. Cambia il codice per risolvere il problema

Hai raccolto i log di DEBUG, i dump di thread e l'output del profiler della CPU, ora hai abbastanza informazioni per concludere una causa root.  Vedi [2] qui sotto per dei messaggi di log di esempio che mostrano un JCR EventListener / EventConsumer a lunga esecuzione.

Sulla base dei risultati, puoi vedere uno dei seguenti:

  1. Un bug in un JCR EventListener personalizzato - per risolvere il problema, ottimizza il codice.
  2. Un grande accumulo di contenuti che rallenta l'esecuzione di un EventListener personalizzato o preconfigurato.
        Per risolvere il problema, elimina il relativo contenuto di cui non hai più bisogno:
           1. Vai su CRX Explorer http://host:port/crx/explorer/index.jsp (/crx/index.jsp in CQ5.4 e versioni precedenti)
           2. Apri "Esplora contenuti" e naviga al percorso del contenuto che desideri ripulire.
           3. Fai clic con il pulsante destro del mouse sul nodo nella parte superiore dell'albero che desideri eliminare e seleziona "Elimina ricorsivamente"
           4. Disattiva la scansione preliminare e l'esecuzione
  3. Un problema con un JCR Event Listener preconfigurato - contatta il supporto AEM (CQ) per l'assistenza.

[1] Messaggio di errore correlato

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] Esempio di messaggi di log 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.

Informazioni aggiuntive

L'errore è solitamente dovuto a qualcosa di sbagliato con gli ascoltatori dell'evento JCR. Un particolare ascoltatore di eventi JCR potrebbe gestire gli eventi in modo errato o elaborarli troppo lentamente per qualche motivo.

Vedi qui per alcune informazioni di base sugli ascoltatori di eventi JCR.

Logo Adobe

Accedi al tuo account