O desligamento do AEM está demorando muito

Problema

Parar o processo java do AEM normalmente está demorando demais (mais de 10 minutos).

Ambiente

Causa

Pode haver muitas coisas que podem fazer com que o desligamento do AEM demore muito tempo. Quando você para o processo java AEM, ele executa um hook java para encerrar o contêiner OSGi Apache Felix no qual o AEM é executado. Durante o encerramento do contêiner OSGi, o sistema interrompe todos os pacotes configuráveis e componentes do OSGi. Como parte desse processo, vários serviços concluem as operações de gravação, fecham os identificadores de arquivos abertos e aguardam até que todas as solicitações HTTP ativas sejam respondidas.

As causas mais comuns de desligamentos lentos são:

  • O método de desativação de um componente OSGi leva muito tempo para executar
  • Há solicitações de longa execução quando o sistema é desligado

Resolução

Para corrigir um problema de desligamento lento, você precisa analisar os despejos de encadeamentos para descobrir quais encadeamentos estão atrasando o desligamento.

Siga estas etapas:

  1. Execute os despejos de encadeamento seguindo as etapas neste artigo

  2.  Abra os dumps de thread em um analisador de dump de thread, como TDAhttp://fastthread.io/ou Analisador de Encadeamento IBM

  3.  Pesquise os dumps de encadeamento para encadeamentos de solicitação HTTP no estado RUNNABLE com nomes como os encadeamentos abaixo:

    • Tópicos começando com "qtp" no nome:
    "qtp1926827727-86864" #86864 prio=5 os_prio=0 tid=0x00007f320894a800 nid=0x79f0 runnable [0x00007f31d7109000]
       java.lang.Thread.State: RUNNABLE
    • Ou encadeamentos com IP e solicite linha no nome:
    "10.25.10.11 [1457551498445] GET /content/dam/test.jpg HTTP/1.1" #38626 prio=5 os_prio=0 tid=0x00007fe5c854c800 nid=0x7f9c runnable [0x00007fe55f7f3000]
       java.lang.Thread.State: RUNNABLE
  4. Além de solicitar encadeamentos, procure o encadeamento com o nome "FelixStartLevel". Esse thread manipula iniciar e parar todos os pacotes configuráveis e componentes OSGi e dar alguma indicação do que está atrasando o desligamento. 

    "FelixStartLevel" #18 daemon prio=5 os_prio=0 tid=0x00007f32ad8c2800 nid=0x6992 runnable [0x00007f32946d7000]
       java.lang.Thread.State: RUNNABLE
  5.  Procure por padrões no rastreamento de pilha do segmento "FelixStartLevel" em despejos de thread. Veja se está preso parando um pacote ou desativando um componente OSGi específico em muitos dos despejos de encadeamento. Você pode usar uma ferramenta como "grep" para analisar isso. Por exemplo, se você observou que o componente OSGi SlingServletResolver estava sendo desativado em vários despejos de encadeamento, você pode usar o comando abaixo. O comando abaixo conta quantos despejos de encadeamentos têm o encadeamento FelixStartLevel com o SlingServletResolver em seu rastreamento de pilha:

    grep -A 50 FelixStartLevel jstack.* | grep SlingServletResolver | awk '{print $1 }' | uniq | wc -l
  6. Depois de descobrir o que está atrasando o desligamento e determinar se é um problema do aplicativo ou não.  Se estiver relacionado ao código do produto AEM, entre em contato com o Atendimento ao Cliente AEM.

    Observação:

    Veja este artigo para detalhes sobre a análise de dump de thread.

Logotipo da Adobe

Fazer logon em sua conta