Troppi workflow nella casella in entrata bloccano AEM a causa di chiamate pulse.data.json

Problema

L'istanza autore di AEM è lenta e si blocca a causa dell'accumulo di workflow non riusciti e del badge delle chiamate pulse.data.json della casella di entrata del workflow. Il badge della casella in entrata del workflow è l'icona a campana in alto a destra dell'interfaccia Touch.

Nel log degli accessi si osserva che molte chiamate a pulse.data.json vengono effettuate dagli stessi utenti. 

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"

Inoltre, il server AEM mostra un elevato utilizzo della CPU e scarichi di thread catturati da thread AEM come quello sottostante:

"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

AEM 6.2 SP1

Causa

Quando un utente o un gruppo ha molti elementi in sospeso nella casella in entrata, rallenta le chiamate badge pulse.data.json.  Le chiamate a pulse.data.json poi scadono e si combinano, ciò sovraccarica AEM.

Risoluzione

Installa l'ultimo pacchetto correzioni cumulativo per risolvere il bug.

I. Applica la soluzione

Poiché non è possibile installare un pacchetto correzioni su un ambiente AEM di produzione in un breve arco temporale, come soluzione temporanea, procedi come segue:

  1. Vai a CRXDe http://aem-host:port/crx/de/index.jsp e accedi come amministratore.

  2. Crea questa struttura di cartelle da sling: Folder nodes /apps/granite/ui/components/shell/clientlibs/shell/js

  3. Fai clic su "Salva tutto"

  4. Sfoglia per sovrapporre per /libs/granite/ui/components/shell/clientlibs/shell/js/badge.js e modifica il codice come mostrato di seguito:

    Prima:

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

    Dopo (impostare l'aggiornamento ogni 5 minuti):

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

    Scarica

II. Eliminazione di vecchi workflow e attività in esecuzione

Oltre a fissare l'intervallo del badge di notifica del workflow, la causa del problema è dovuta a troppe attività in sospeso nella casella in entrata dell'utente.  Per risolvere questo problema, è necessario eliminare gli elementi della casella in entrata del workflow e le attività che non sono più necessarie:

  1. Vai all'oggetto JMX Manutenzione Workflow:
    http://host:port/system/console/jmx/com.adobe.granite.workflow%3Atype%3DMaintenance

  2. Se non è necessario eseguire attivamente i workflow, eseguire l'eliminazione del workflow avviando purgeActive con dryRun = false.

  3. Vai su http://host:port/crx/explorer/index.jsp e accedi come amministratore.

  4. Apri Content Explorer.

  5. Sfoglia e vai su /etc/taskmanagement/tasks.

  6. Elimina le attività facendo clic con il tasto destro del mouse sul nodo della cartella e selezionando Elimina ricorsivamente.

  7. Disattiva la scansione preliminare e esegui l'eliminazione.

  8. Inoltre, hai più attività sotto i progetti in /content/projects.  Usa il file /projects.html per rimuovere i vecchi progetti che non sono più necessari.

  9. Usa CRXDe per sfogliare i sottonodi /content/projects e elimina tutti i compiti che non sono più necessari. Per esempio: /content/projects/geometrixx/outdoors/jcr:content/dashboard/gadgets/tasks

Logo Adobe

Accedi al tuo account