Muitos workflows na caixa de entrada causam falhas do AEM devido às chamadas pulse.data.json

Problema

A instância do autor do AEM está lenta e falhando devido à acumulação de workflows com falha e chamadas pulso.data.json de notificação da caixa de entrada de workflow. A notificação da caixa de entrada do workflow é o ícone de sino no canto superior direito da interface de toque.

No access.log, observa-se que muitas chamadas para pulse.data.json são dos mesmos usuários. 

10.43.34.55 - user 06/Jan/2017:18:17:11 +0900 "GET /mnt/overlay/granite/ui/content/shell/header/actions/pulse.data.json?_=1483664547926 HTTP/1.1" 500 1234 "https://authorhost/sites.html/content/geometrixx/en" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0"
10.43.34.55 - user 06/Jan/2017:18:17:13 +0900 "GET /mnt/overlay/granite/ui/content/shell/header/actions/pulse.data.json?_=1483664547927 HTTP/1.1" 500 1234 "https://authorhost/sites.html/content/geometrixx/en" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0"
10.43.34.55 - user 06/Jan/2017:18:17:15 +0900 "GET /mnt/overlay/granite/ui/content/shell/header/actions/pulse.data.json?_=1483664547928 HTTP/1.1" 500 1234 "https://authorhost/sites.html/content/geometrixx/en" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0"
10.43.34.55 - user 06/Jan/2017:18:17:17 +0900 "GET /mnt/overlay/granite/ui/content/shell/header/actions/pulse.data.json?_=1483664547929 HTTP/1.1" 500 1234 "https://authorhost/sites.html/content/geometrixx/en" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0"

Além disso, o servidor AEM exibe alto uso da CPU e despejos de thread capturados de threads AEM como o abaixo:

"192.168.10.5 [1485896535734] GET /mnt/overlay/granite/ui/content/shell/header/actions/pulse.data.json HTTP/1.1" #1969 prio=5 os_prio=0 tid=0x0000000001a39800 nid=0xaf2 runnable [0x00007f2f5ae4f000]
   java.lang.Thread.State: RUNNABLE
 at org.apache.jackrabbit.oak.spi.state.ReadOnlyBuilder.getChildNodeNames(ReadOnlyBuilder.java:101)
 at org.apache.jackrabbit.oak.plugins.tree.impl.AbstractTree.getChildNames(AbstractTree.java:145)
 at org.apache.jackrabbit.oak.plugins.tree.impl.AbstractTree.getChildren(AbstractTree.java:322)
 at org.apache.jackrabbit.oak.security.authorization.permission.PermissionStoreImpl.loadPermissionEntries(PermissionStoreImpl.java:150)
 at org.apache.jackrabbit.oak.security.authorization.permission.PermissionStoreImpl.load(PermissionStoreImpl.java:115)
 at org.apache.jackrabbit.oak.security.authorization.permission.PermissionEntryCache.getEntries(PermissionEntryCache.java:48)
 at org.apache.jackrabbit.oak.security.authorization.permission.PermissionEntryCache.load(PermissionEntryCache.java:63)
 at org.apache.jackrabbit.oak.security.authorization.permission.PermissionEntryProviderImpl.init(PermissionEntryProviderImpl.java:109)
 at org.apache.jackrabbit.oak.security.authorization.permission.PermissionEntryProviderImpl.<init>(PermissionEntryProviderImpl.java:72)
 at org.apache.jackrabbit.oak.security.authorization.permission.CompiledPermissionImpl.<init>(CompiledPermissionImpl.java:112)
 at org.apache.jackrabbit.oak.security.authorization.permission.CompiledPermissionImpl.create(CompiledPermissionImpl.java:126)
 at org.apache.jackrabbit.oak.security.authorization.permission.PermissionProviderImpl.<init>(PermissionProviderImpl.java:71)
 at org.apache.jackrabbit.oak.security.authorization.AuthorizationConfigurationImpl.getPermissionProvider(AuthorizationConfigurationImpl.java:185)
 at org.apache.jackrabbit.oak.security.authorization.composite.CompositeAuthorizationConfiguration.getPermissionProvider(CompositeAuthorizationConfiguration.java:134)
 at org.apache.jackrabbit.oak.core.MutableRoot$1.createValue(MutableRoot.java:126)
 at org.apache.jackrabbit.oak.core.MutableRoot$1.createValue(MutableRoot.java:123)
 at org.apache.jackrabbit.oak.core.LazyValue.get(LazyValue.java:53)
 - locked <0x0000000726732148> (a org.apache.jackrabbit.oak.core.MutableRoot$1)
 at org.apache.jackrabbit.oak.core.MutableRoot$2.getExecutionContext(MutableRoot.java:311)
 at org.apache.jackrabbit.oak.query.QueryEngineImpl.executeQuery(QueryEngineImpl.java:256)
 at org.apache.jackrabbit.oak.query.QueryEngineImpl.executeQuery(QueryEngineImpl.java:233)
 at org.apache.jackrabbit.oak.plugins.identifier.IdentifierManager.resolveUUID(IdentifierManager.java:314)
 at org.apache.jackrabbit.oak.plugins.identifier.IdentifierManager.resolveUUID(IdentifierManager.java:308)
 at org.apache.jackrabbit.oak.plugins.identifier.IdentifierManager.resolveUUID(IdentifierManager.java:304)
 at org.apache.jackrabbit.oak.plugins.identifier.IdentifierManager.getTree(IdentifierManager.java:133)
 at org.apache.jackrabbit.oak.security.user.AuthorizableBaseProvider.getByContentID(AuthorizableBaseProvider.java:56)
 at org.apache.jackrabbit.oak.security.user.AuthorizableBaseProvider.getByID(AuthorizableBaseProvider.java:51)
 at org.apache.jackrabbit.oak.security.user.UserProvider.getAuthorizable(UserProvider.java:211)
 at org.apache.jackrabbit.oak.security.user.UserManagerImpl.getAuthorizable(UserManagerImpl.java:110)
 at org.apache.jackrabbit.oak.jcr.delegate.UserManagerDelegator$1.performNullable(UserManagerDelegator.java:64)
 at org.apache.jackrabbit.oak.jcr.delegate.UserManagerDelegator$1.performNullable(UserManagerDelegator.java:61)
 at org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate.performNullable(SessionDelegate.java:243)
 at org.apache.jackrabbit.oak.jcr.delegate.UserManagerDelegator.getAuthorizable(UserManagerDelegator.java:61)
 at com.adobe.granite.workflow.core.WorkflowSessionFactory.isSuperUser(WorkflowSessionFactory.java:356)
 at com.adobe.granite.workflow.core.WorkflowSessionFactory.getWorkflowSession(WorkflowSessionFactory.java:389)
 at com.adobe.granite.workflow.core.WorkflowSessionFactory.getAdapter(WorkflowSessionFactory.java:515)
 at org.apache.sling.adapter.internal.AdapterManagerImpl.getAdapter(AdapterManagerImpl.java:147)
 at com.adobe.granite.workflow.core.jcr.WorkItemAdapterFactory.getAdapter(WorkItemAdapterFactory.java:128)
 at org.apache.sling.adapter.internal.AdapterManagerImpl.getAdapter(AdapterManagerImpl.java:147)
 at com.adobe.granite.workflow.core.jcr.WorkItemManager.getInboxItems(WorkItemManager.java:289)
 at com.adobe.granite.workflow.core.WorkflowSessionImpl.getActiveInboxItems(WorkflowSessionImpl.java:711)
 at com.adobe.granite.workflow.core.WorkflowSessionImpl.getActiveInboxItems(WorkflowSessionImpl.java:618)
 at org.apache.jsp.libs.cq.gui.components.shell.badge.data_json_jsp._jspService(data_json_jsp.java:609)

Ambiente

SP1 do AEM 6.2

Causa

Quando um usuário ou grupo tem muitos itens pendentes na caixa de entrada, deixa a notificação das chamadas pulse.data.json lenta.  As chamadas para pulse.data.json, depois o tempo limite e composto que sobrecarrega o AEM.

Resolução

Instale o último Pacote de Correções Cumulativo para corrigir o erro.

I. Siga a solução alternativa

Como não é possível instalar um pacote de correções em um ambiente de produção AEM em um curto período de tempo, como uma solução alternativa temporária, faça o seguinte:

  1. Vá para CRXDe http://aem-host:port/crx/de/index.jsp e faça logon como administrador.

  2. Crie essa estrutura de pastas fora do lançamento: Folder nodes /apps/granite/ui/components/shell/clientlibs/shell/js

  3. Clique em "Salvar tudo"

  4. Navegue até a sobreposição para /libs/granite/ui/components/shell/clientlibs/shell/js/badge.js e modifique o código como mostrado abaixo:

    Antes:

    setInterval(function() {
    updateBadge(el, src, true);
    }, 2000);

    Após (definido para atualizar a cada 5 minutos):

    setInterval(function() {
    updateBadge(el, src, true);
    }, 300000);

    Download

II. Remova tarefas e workflows antigos em execução

Além de corrigir o intervalo do selo de notificação do workflow, a causa do problema é devido a muitas tarefas pendentes na caixa de entrada do usuário.  Para resolver isso, você precisa excluir os itens da caixa de entrada do workflow e as tarefas que não são mais necessárias:

  1. Vá para o objeto JMX de Manutenção do Workflow:
    http://host:port/system/console/jmx/com.adobe.granite.workflow%3Atype%3DMaintenance

  2. Se você não precisa executar workflows ativamente, execute a limpeza do workflow iniciando purgeActive com dryRun = false.

  3. Vá para http://host:port/crx/explorer/index.jsp e faça logon como administrador.

  4. Abra o Content Explorer.

  5. Navegue até /etc/taskmanagement/tasks.

  6. Exclua as tarefas clicando com o botão direito do mouse no nó da pasta e selecionando Excluir recursivamente.

  7. Desabilite a verificação preliminar e execute a exclusão.

  8. Além disso, você tem mais tarefas em projetos em /content/projects.  Use o /projects.html para remover projetos antigos que não são mais necessários.

  9. Use o CRXDe para navegar os subnós /content/projects e excluir quaisquer tarefas que não são mais necessárias. Por exemplo: /content/projects/geometrixx/outdoors/jcr:content/dashboard/gadgets/tasks

Logotipo da Adobe

Fazer logon em sua conta