Problema
O seguinte erro é exibido no arquivo logs/crx/error.log:
*WARN * ObservationDispatcher: More than 200000 events in the queue
Ou o sistema fica lento durante a importação de dados.
Solução
Para analisar o problema, faça o seguinte:
- Crie uma depuração EventConsumer que forneça o tempo da execução de cada ouvinte de evento JCR.
- Reproduza o problema, execute os despejos de thread e execute o profiler para coletar detalhes de qual código ou conteúdo está causando o problema.
- Modifique o código para corrigir o problema, limpe o conteúdo que está causando o problema ou entre em contato com o suporte do AEM (CQ) se o problema parece estar relacionado ao código do produto.
1. Crie um log de depuração EventConsumer
No CQ5.4/CRX2.2 ou anterior:
- Interrompa o CQ.
- Defina o seguinte nível de log em crx-quickstart/server/runtime/0/_crx/WEB-INF/log4j.xml <logger name="org.apache.jackrabbit.core.observation.EventConsumer">
<level value="debug" />
</logger> - Inicie o CQ.
- Agora, em logs/crx/error.log são exibidas mensagens de log de depuração de org.apache.jackrabbit.core.observation.EventConsumer mostrando o tempo de execução para cada manipulador de eventos.
- Vá para http://host:port/system/console/configMgr e faça login como administrador.
- Encontre a fábrica Apache Sling Logging Logger e crie uma instância clicando no botão + à direita da configuração de fábrica. Essa etapa cria um novo logger de registro.
- Defina a configuração com estas configurações:
Nível de registro: DEBUG
Caminho do arquivo de log: logs/eventconsumer.log
Categorias: org.apache.jackrabbit.core.observation.EventConsumer - Agora, em logs/eventconsumer.log, são exibidas mensagens de log de depuração de org.apache.jackrabbit.core.observation.EventConsumer mostrando o tempo de execução para cada manipulador de eventos.
2. Reproduza o problema
Agora que você tem um arquivo de log de depuração, reproduza o problema tentando novamente qualquer atividade que parecesse causar o congestionamento. Agora pegue os despejos de threads e execute o profiler da CPU para ajudar a identificar o que está causando a lentidão.
3. Altere o código para corrigir o problema
Você coletou logs DEBUG, despejos de threads e o resultado do profiler da CPU, então agora tem informações suficientes para descobrir uma causa raiz. Consulte [2] abaixo para obter um exemplo de mensagens de log mostrando um JCR EventListener/EventConsumer com execução longa.
Com base nos resultados, é possível ver um dos seguintes:
- Um bug em um JCR EventListener personalizado: para resolver o problema, otimize seu código.
- Um grande acúmulo de conteúdo que faz com que um JCR EventListener personalizado ou pronto para uso seja executado lentamente.
Para corrigir o problema, exclua o conteúdo relacionado que não é mais necessário:
1. Vá para o CRX Explorer http://host:porta/crx/explorer/index.jsp (/crx/index.jsp no CQ5.4 e versões posteriores)
2. Abra o "Explorador de conteúdo" e navegue até o caminho do conteúdo que deseja limpar.
3. Clique com o botão direito do mouse no nó na parte superior da árvore que você deseja excluir e selecione "Excluir recursivamente"
4. Desativar a varredura e execução preliminares - Um problema com um ouvinte de eventos JCR pronto para uso: entre em contato com o suporte do AEM (CQ) para obter ajuda.
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.
Informações adicionais
O erro geralmente ocorre devido a algo errado com os ouvintes de eventos do JCR. Um determinado ouvinte de evento do JCR pode estar manipulando eventos incorretamente ou processando-os muito lentamente por algum motivo.
Clique aqui para obter algumas informações básicas sobre os ouvintes de eventos do JCR.
Fazer logon em sua conta