Problema
Aparece el siguiente error en el fichero logs/crx/error.log:
*WARN * ObservationDispatcher: More than 200000 events in the queue
O bien, el sistema es lento durante la importación de datos.
Solución
Para resolver el problema, haga lo siguiente:
- Cree un depurador EventConsumer que le proporcione la sincronización de la ejecución de cada escuchador de eventos JCR.
- Reproduzca el problema y ejecute el generador de perfiles para recopilar los detalles del código o contenido que está causando el problema.
- Modifique su código para solucionar el problema, limpie el contenido que está causando el problema, o póngase en contacto con el soporte técnico de AEM (CQ) si el problema parece estar relacionado con el código del producto.
1. Crear un registro de depuración de EventConsumer
En CQ5.4/CRX2.2 o anterior:
- Detener CQ.
- Establezca el siguiente nivel de registro en el crx-quickstart/server/runtime/0/_crx/WEB-INF/log4j.xml <logger name="org.apache.jackrabbit.core.observation.EventConsumer">
<level value="debug" />
</logger> - Iniciar CQ.
- Ahora, en logs/crx/error.log verá mensajes de registro de depuración de org.apache.jackrabbit.core.observation.EventConsumer mostrando el tiempo de ejecución de cada responsable de eventos.
- Vaya a http://host:port/system/console/configMgr e inicie sesión como administrador.
- Busque la fábrica de Apache Sling Logger y cree una instancia haciendo clic en el botón + a la derecha de la configuración de fábrica. Este paso crea un nuevo registrador de registros.
- Configure la configuración con estos ajustes:
Nivel de registro: Depurar
Ruta del archivo de registros: logs/eventconsumer.log
Categorias: org.apache.jackrabbit.core.observation.EventConsumer - Ahora, en logs/eventconsumer.log verá mensajes de depuración de resgistros desde org.apache.jackrabbit.core.observation.EventConsumer mostrando el tiempo de ejecución de cada gestor de eventos.
2. Reproducir la edición
Ahora que tiene un archivo de registro de depuración, reproduzca el problema reintentando cualquier actividad que parezca causar que los eventos se acumulen. Ahora vuelque volcados de hilo y ejecute el perfil de CPU para ayudar a identificar qué está causando la lentitud.
3. Cambiar el código para solucionar el problema
Usted ha recolectado registros DEBUG, volcado de hilos y salida del perfil de CPU, de modo que ahora tiene suficiente información para concluir una causa raíz. Vea [2] más abajo para ver ejemplos de mensajes de registro que muestran un JCR EventListener / EventConsumer de larga duración.
En base a los hallazgos, se puede ver uno de los siguientes:
- Un error en un personalizado JCR EventListener: para resolver el problema, optimice su código.
- Una gran acumulación de contenido que hace que un JCR EventListener personalizado o fuera de la caja se ejecute lentamente.
Para solucionar el problema, elimine el contenido relacionado que ya no necesita:
1. Vaya a CRX Explorer http://host:port/crx/explorer/index.jsp (/crx/index.jsp en CQ5.4 y versiones anteriores)
2. Abra el Explorador de contenido y buscar la ruta de contenido que desea limpiar.
3. Hacer clic con el botón derecho del ratón en el nodo de la parte superior del árbol que desea eliminar y seleccione “Eliminar de forma recurrente”
4. Desactivar el análisis preliminar y ejecutar - Un problema con un gestor de Eventos JCR fuera de la caja - póngase en contacto con el soporte técnico de AEM (CQ) para obtener ayuda.
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)
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.
Información adicional
El error suele deberse a un error en los oyentes del evento JCR. Un oyente de eventos de JCR en particular podría estar manejando eventos incorrectamente o procesándolos demasiado lentamente por alguna razón.
Vea aquí para más información sobre los gestores de Eventos de JCR.