Analisar problemas do manipulador de eventos

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:

  1. Crie uma depuração EventConsumer que forneça o tempo da execução de cada ouvinte de evento JCR.
  2. 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.
  3. 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:

  1. Interrompa o CQ.
  2. 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>
  3. Inicie o CQ.
  4. 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.
No CQ5.5/CRX2.3 ou posterior (incluindo versões do AEM):
  1. Vá para http://host:port/system/console/configMgr e faça login como administrador.
  2. 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.
  3. 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
  4. 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:

  1. Um bug em um JCR EventListener personalizado: para resolver o problema, otimize seu código.
  2. 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
  3. Um problema com um ouvinte de eventos JCR pronto para uso: entre em contato com o suporte do AEM (CQ) para obter ajuda.

[1] Mensagem de erro relacionada

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] Exemplo de mensagens de log DEBUG do EventConsumer

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.

Logotipo da Adobe

Fazer logon em sua conta