Problema
A veces, JVM se bloquea con SEGV, lo que ocurre siempre en el código compilado JIT en com.adobe.cq.social.datastore.as.impl.UGCCDataServiceImpl. Es posible que haya un error de Java aquí, pero uno que parece afectar a un conjunto de métodos muy localizados.
Existe una solución alternativa al especificar los parámetros JIT para esta clase que parece aliviar el problema. Esta tarea consiste en captar y documentar la solución y las circunstancias en las que es aplicable.
¿Quién necesita esta solución?
- Está utilizando Social Communities Extension con un proveedor de almacenamiento en nube social configurado.
- Está ejecutando AEM en Linux de 64 bits utilizando la versión 1.7 de Oracle JVM de 64 bits.
- Está experimentando caídas de JVM con Adobe Experience Manager.
- Las caídas de JVM se informan en com.adobe.cq.social.datastore.as.impl.UGCCDataServiceImpl
Las caídas de JVM van acompañadas de un archivo hs_err_pid<<PROCESS-ID>>.log que aparece en el directorio crx-quickstart de CQ. La información básica sobre la causa del fallo de la JVM aparecerá en este archivo. Busque algo como esto en el caso de que se produzca un fallo en las direcciones de esta solución provisional:
# A fatal error has been detected by the Java Runtime Environment: # # SIGSEGV (0xb) at pc=0x00002aaaabf4d59c, pid=17837, tid=1276991808 # # JRE version: Java(TM) SE Runtime Environment (7.0_65-b17) (build 1.7.0_65-b17) # Java VM: Java HotSpot(TM) 64-Bit Server VM (24.65-b04 mixed mode linux-amd64 compressed oops) # Problematic frame: # J 3816 C2 com.adobe.cq.social.datastore.as.impl.UGCCDataServiceImpl.readDocument(Ljava/lang/String;)Ljava/util/Map; (287 bytes) @ 0x00002aaaabf4d59c [0x00002aaaabf4d4e0+0xbc]
La información crítica es la última línea de este ejemplo que muestra el marco problemático que involucra com.adobe.cq.social.datastore.as.impl.UGCCDataServiceImpl, un componente del conector de servicios de nube.
¿Cuál es la solución?
La solución utiliza dos enfoques: utilizar una versión de JVM menos propensa a experimentar el problema, y utilizar una opción de JVM para desactivar la compilación nativa del código del problema específico.
En el momento de publicar esta nota, la última versión de Java 1.7 disponible de Oracle es 1.7_65. La recomendación de esta solución es pasar a 1.7_65 desde cualquier versión anterior.
Usando 1.7_65, la solución es además deshabilitar la compilación justo a tiempo (JIT) de una clase y método de problema específico a través de la opción Java -XX:CompileCommand=exclude. Específicamente, -XX:CompileCommand=exclude,com.adobe.cq.social.datastore.as.impl.UGCCDataServiceImpl::readDocument"
¿Se puede implementar esta solución en mi entorno?
Esta implementación requerirá verificar y posiblemente actualizar la versión de Java que ha instalado y actualizar el script de inicio que utiliza para iniciar AEM. Para actualizar Java, consulte la documentación de Oracle relativa a la elección, descarga, instalación y configuración de jdk1.7.0_65 64-bit para Linux x86-64.
Generalmente se recomienda que AEM se inicie a través de los scripts de inicio ubicados en crx-quickstart/bin/start. Sin embargo, es común que se utilicen scripts de inicio personalizados. En el caso de que se esté utilizando crx-quickstart/bin/start, se debe añadir la siguiente opción:
CQ_JVM_OPTS="${CQ_JVM_OPTS} -XX:CompileCommand=exclude,com.adobe.cq.social.datastore.as.impl.UGCCDataServiceImpl::readDocument"
NOTA: es necesario mirar la ubicación/arranque por defecto y ver a dónde pertenecería exactamente.