Problem

Die AEM-Autor-Instanz ist langsam und stürzt ab aufgrund von Anhäufung fehlgeschlagener Workflows und Workfloweingangs-Badge "pulse.data.json"-Aufrufen. Das Workfloweingangs-Badge ist das Glockensymbol in der oberen rechten Ecke der Touch-UI.

In access.log werden viele Aufrufe von pulse.data.json von denselben Benutzern durchgeführt. 

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"

Darüber hinaus zeigt der AEM-Server eine hohe CPU-Auslastung und Thread-Sicherungskopien von AEM-Threads wie dem folgenden:

"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)

Umgebung

AEM 6.2 SP1

Ursache

Wenn ein Benutzer oder eine Gruppe viele ausstehende Posteingangselemente hat, verlangsamt dies die Badge-"pulse.data.json"-Aufrufe.  Die Aufrufe von pulse.data.json lösen dann die Zeitbegrenzung aus und sammeln sich an, was AEM überlastet.

Lösung

Installieren Sie das neueste Cumulative Fix Pack, um den Fehler zu beheben.

I. Anwenden der Problemumgehung

Da es nicht möglich ist, ein Fixpack in einer AEM-Umgebung in einem kurzen Zeitraum zu installieren, führen Sie als eine temporäre Problemumgehung die folgenden Schritte aus:

  1. Gehen Sie auf CRXDe http://aem-host:port/crx/de/index.jsp und melden Sie sich als Admin an.

  2. Erstellen Sie die folgende Ordnerstruktur aus sling: Ordnerknoten /apps/granite/ui/components/shell/clientlibs/shell/js

  3. Klicken Sie auf „Alle Speichern“.

  4. Navigieren Sie zu overlay für /libs/granite/ui/components/shell/clientlibs/shell/js/badge.js und ändern Sie den Code wie folgt:

    Vorher:

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

    Nachher (eingestellt auf: alle 5 Minuten aktualisieren):

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

    Herunterladen

II. Bereinigen Sie alte, laufende Workflows und Aufgaben

Neben dem Beheben des Intervalls des Workfloweingangs-Badges ist eine weitere Ursache für das Problem die Ansammlung zu vieler Aufgaben im Posteingang des Benutzers.  Um dies zu beheben, müssen Sie Workfloweingangs-Elemente und Aufgaben, die nicht mehr benötigt werden, löschen:

  1. Rufen Sie das Workflowwartungs-JMX-Objekt auf:
     http://host:port/system/console/jmx/com.adobe.granite.workflow%3Atype%3DMaintenance

  2. Wenn Sie aktiv laufende Workflows nicht benötigen, führen Sie eine Workflowbereinigung aus, indem Sie purgeActive mit dryRun = false initiieren.

  3. Wechseln Sie zu http://host:port/crx/explorer/index.jsp und melden Sie sich als Admin an.

  4. Öffnen Sie Content Explorer.

  5. Navigieren Sie zu /etc/taskmanagement/tasks.

  6. Löschen Sie Aufgaben durch Rechtsklick auf den Ordnerknoten und Auswahl von Rekursiv löschen.

  7. Deaktivieren Sie Vorläufiger Scan und führen Sie den Löschvorgang aus.

  8. Darüber hinaus finden Sie mehr Aufgaben unter Projekte in /content/projects.  Verwenden Sie /projects.html, um alte Projekte zu entfernen, die nicht mehr benötigt werden.

  9. Verwenden Sie CRXDe, um /content/projects-Unterknoten zu durchsuchen und löschen Sie alle Aufgaben, die nicht mehr benötigt werden. Zum Beispiel: /content/projects/geometrixx/outdoors/jcr:content/dashboard/gadgets/tasks

Dieses Werk unterliegt den Bedingungen der Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License.  Twitter™- und Facebook-Beiträge fallen nicht unter die Bedingungen der Creative Commons-Lizenz.

Rechtliche Hinweise   |   Online-Datenschutzrichtlinie