Análisis del volcado de hilos AEM
AEM Siga los pasos y las prácticas recomendadas detalladas en este artículo para analizar correctamente los volcados de hilos de Java mediante la herramienta IBM Thread Analyzer.
Descripción description
Entorno
Adobe Experience Manager
Problema
AEM ¿Cómo analizar los volcados de hilos de Java de la usando la herramienta IBM Thread Analyzer?
Resolución resolution
-
Descargue e instale IBM Thread Analyzer (lo llamaremos IBM TDA para abreviar).
-
Capture volcados de hilos de una instancia de AEM que experimenta problemas de rendimiento.
-
Abra los volcados de subprocesos en IBM TDA.
-
Para ver los detalles de un volcado de hilos, seleccione el archivo en el listado y, a continuación, haga clic en el botón Detalle del hilo.
-
Ordene por Profundidad de la pila con las pilas más largas en la parte superior.
-
Revise los hilos con una profundidad de pila de 10 líneas o más. Esos suelen ser los hilos de mayor interés.
Tome notas de los hilos de interés.
-
Ordenar por subproceso State.
-
Desplácese hacia abajo hasta los subprocesos ejecutables. Los hilos ejecutables son los que estaban ocupando activamente tiempo de CPU cuando se tomó el volcado de hilos.
Nota: al revisar los subprocesos ejecutables, puede omitir los subprocesos enumerados en la sección Threads que se pueden omitir en la parte inferior de esta página.
-
Encuentre los subprocesos ejecutables que forman parte de la aplicación, como los subprocesos de trabajo en segundo plano o los de solicitud (los de solicitud tienen nombres como: 127.0.0.1
[
1347028187737]
GET /content/sites/global/en/sitemap.static-delivery.httpd.html HTTP/1.1).Cuando los encuentre, haga clic en ellos uno por uno.
-
Para cada hilo de solicitud, puede averiguar cuándo el explorador del usuario hizo la solicitud al servidor si mira la marca de tiempo en el nombre del hilo.
Por ejemplo, en el nombre de subproceso anterior, la marca de tiempo (en formato unix epoch de milisegundos) es 1347028187737.
Podemos convertir ese número epoch en una fecha/hora con www.epochconverter.com.
Cada volcado de hilo muestra la fecha y la hora en que se tomó.
Puede tomar la diferencia de tiempo entre el tiempo de la solicitud y el tiempo de volcado del hilo para ver cuánto tiempo ha estado activa una solicitud.
-
Después de revisar los subprocesos de solicitud, desplácese por los otros subprocesos ejecutables.
Cuando haya encontrado un hilo ejecutable de interés, mire el panel central, Hilos en espera.
Los Threads que aparecen allí están esperando a que el subproceso seleccionado libere un monitor.
Si no ve ningún hilo en espera, el hilo seleccionado podría seguir siendo el propietario de un Bloqueo (consulte la implementación de clases de Bloqueo para obtener detalles).
Por ejemplo, con ReentrantReadWriteLock no se puede saber qué hilo es el titular del bloqueo, ya que los bloqueos implementan varios monitores internamente.
Por lo tanto, es posible que tenga que buscar en el código fuente para que coincida con un hilo que podría ser el soporte de la cerradura.
-
Si el hilo tenía un bloqueo o monitor que muchos otros hilos estaban esperando, revise el resto de los volcados de hilos para ver si puede encontrar otros que tengan el mismo problema.
Vea si el mismo hilo sigue existiendo en los otros volcados (en IBM TDA puede seleccionar varios volcados de hilos y hacer clic en el botón Comparar Threads para ver el estado de un hilo en varios volcados de hilos.
-
Vea el Servicio de colección en la siguiente captura de pantalla:
-
En esta vista puede ver el hilo a través de múltiples volcados para ver si es de larga duración.
Básicamente, si el hilo está en el estado ejecutable en varios volcados y tiene una pila larga, normalmente significa que es de larga duración.
-
Si no encontró mucho mirando los hilos ejecutables, vuelva a la lista de hilos, seleccione un volcado y haga clic en el botón Monitorizar detalle del panel superior.
IBM TDA abrirá una ventana con una vista de árbol de los hilos propietarios del monitor y sus hilos en espera.
Nota: podría mostrar algunos subprocesos del grupo de subprocesos, como el monitor del grupo de subprocesos del motor servlet, los subprocesos inactivos podrían omitirse.
Normalmente se puede saber que un hilo es de reserva de hilos inactivo porque la mayoría de las veces solo tienen 10 líneas de pila o menos.
Uso de CPU a nivel de hilo (solo para la plataforma Linux):
-
Si ha capturado la salida
top -H -b -n1 -p <javapid>
además de los volcados de hilos, puede hacer referencia cruzada al uso de la CPU a nivel de hilo.Abra la salida superior y obtenga el ID de proceso de los hilos que están utilizando la CPU.
Convierta el ID del proceso a hexadecimal y, a continuación, busque ese valor hexadecimal en el archivo de volcado de hilos correspondiente.
El identificador debe coincidir con el nid de uno de los subprocesos.
-
Si el hilo que utiliza la mayor parte de la CPU es el hilo VM o cualquier hilo GC, es posible que tenga un problema de memoria.
Repita el mismo ejercicio para más volcados de hilos y la salida superior, y si hay un patrón de estos hilos tomando el tiempo de la CPU, tiene un problema de memoria.
-
Si ha confirmado el problema de memoria, capture un volcado de la pila la próxima vez que ocurra el problema.
Consulte este artículo sobre análisis de problemas de memoria para obtener más información sobre cómo capturar y analizar volcados de la pila.
Threads que se puede omitir:
- Hilo VM: Este es un hilo del sistema VM.
- Hilos que empiezan por GC task thread: Son hilos de recopilación de datos desechables.
- Threads con nombres similares a
- [ 1347028691218] in code at java.net.PlainSocketImpl.socketAccept(Native Method)
: estos son subprocesos del grupo de subprocesos del motor de servlets que esperan nuevas conexiones.