Problema

La instancia de autor de AEM es lenta y se bloquea debido a la acumulación de flujos de trabajo fallidos y llamadas a la bandeja de entrada del flujo de trabajo de badge pulse.data.json. La insignia de la bandeja de entrada del flujo de trabajo es el icono de campana en la parte superior derecha de la interfaz de usuario táctil.

En el access.log, se observa que muchas llamadas a pulse.data.json están ocurriendo desde los mismos usuarios. 

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"

Además, el servidor AEM muestra una alta utilización de la CPU y volcados de subprocesos capturados de subprocesos de AEM como el que se muestra a continuación:

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

Entorno

AEM 6.2 SP1

Causa

Cuando un usuario o grupo tiene muchos elementos pendientes en la bandeja de entrada, hace que las llamadas del badge pulse.data.json sean lentas.  Las llamadas a pulse.data.json entonces se agotan y se combinan, lo que sobrecarga el AEM.

Resolución

Instale el último Cumulative Fix Pack para corregir el error.

I. Aplicar el método alternativo

Dado que no es posible instalar un paquete de correcciones en un entorno de producción AEM en un corto periodo de tiempo, como solución temporal, haga lo siguiente:

  1. Vaya a CRXDe http://aem-host:port/crx/de/index.jsp e ingrese como admin.

  2. Cree esta estructura de carpetas fuera del sling: Nodos de carpeta /apps/granite/ui/components/shell/clientlibs/shell/js 

  3. Haga clic en "Guardar todo"

  4. Vaya a la superposición de /libs/granite/ui/components/shell/clientlibs/shell/js/badge.js y modifique el código como se muestra a continuación:

    Anterior:

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

    Después (configurado para actualizarse cada 5 minutos):

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

    Descargar

II. Purgar flujos de trabajo y tareas antiguas en ejecución

Además de corregir el intervalo de la tarjeta de notificación de flujo de trabajo, la causa del problema se debe a que hay demasiadas tareas pendientes en la bandeja de entrada del usuario.  Para solucionarlo, debe borrar los elementos de la carpeta de entrada del espacio de trabajo y las tareas que ya no son necesarias:

  1. Vaya al objeto JMX de mantenimiento del espacio de trabajo:
    http://host:port/system/console/jmx/com.adobe.granite.workflow%3Atype%3DMaintenance

  2. Si no necesita ejecutar flujos de trabajo de forma activa, ejecute la purga del flujo de trabajo iniciando purgeActive con dryRun = false.

  3. Vaya a http://host:port/crx/explorer/index.jsp e ingrese como administrador.

  4. Abra el explorador de contenido.

  5. Busque /etc/taskmanagement/tasks.

  6. Eliminar tareas haciendo clic con el botón derecho del ratón en el nodo de carpeta y seleccionando Eliminar recursivamente.

  7. Deshabilite el análisis preliminar y ejecute la eliminación.

  8. Además, tiene más tareas en proyectos en /contenido/proyectos.  Utilice /projects.html para eliminar los proyectos antiguos que ya no son necesarios.

  9. Utilice CRXDe para navegar por los subnodos /content/projects y eliminar las tareas que ya no sean necesarias. Por ejemplo: /content/projects/geometrixx/outdoors/jcr:content/dashboard/gadgets/tasks

Esta obra está autorizada con arreglo a la licencia de Reconocimiento-NoComercial-CompartirIgual 3.0 Unported de Creative Commons.  Los términos de Creative Commons no cubren las publicaciones en Twitter™ y Facebook.

Avisos legales   |   Política de privacidad en línea