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 de la mediante el IBM Thread Analyzer herramienta.

Descripción description

Entorno

Adobe Experience Manager

Problema

AEM Cómo analizar los volcados de hilos de Java de la mediante IBM Thread Analyzer herramienta?

Resolución resolution

  1. Descargar e instalar IBM Thread Analyzer (lo llamaremos IBM TDA para abreviar).

  2. Capture volcados de hilos de una instancia de AEM que experimenta problemas de rendimiento.

  3. Abra los volcados de subprocesos en IBM TDA.

  4. Para ver los detalles de un volcado de hilos, seleccione el archivo en la lista y, a continuación, haga clic en Detalle del hilo botón.

  5. Ordenar por Profundidad de pila con las pilas más largas en la parte superior.

  6. 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.

  7. Ordenar por subproceso Estado.

  8. Desplácese hacia abajo hasta el Ejecutable hilos. Los hilos ejecutables son los que estaban ocupando activamente tiempo de CPU cuando se tomó el volcado de hilos.

    Nota: Al revisar la Ejecutable hilos, puede ignorar los listados en la  Threads que se puede ignorar  en la parte inferior de esta página.

  9. Encuentre los hilos ejecutables que forman parte de la aplicación, como los hilos de trabajo en segundo plano o los de solicitud (los de solicitud tienen nombres como este -  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.

  10. 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 del hilo 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.

  11. Después de revisar los hilos de solicitud, desplácese por los demás Ejecutable hilos.

    Una vez que 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 hilo Bloquear (consulte implementación de clases de Bloquear para obtener más información).

    Por ejemplo, con un 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.

  12. 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.

  13. Consulte la Servicio de colección en la captura de pantalla siguiente:

  14. 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  Ejecutable estado en varios volcados y tiene una pila larga, lo que generalmente significa que es un hilo de larga duración.

  15. Si no has encontrado mucho mirando el Ejecutable hilos, vuelva a la lista de hilos, seleccione un volcado de hilos y haga clic en Monitorización de detalles en el panel superior.

IBM TDA abrirá una ventana con una vista de árbol de los hilos propietarios del monitor y sus hilos en espera.

Nota: Puede mostrar algunos hilos del pool de hilos, como el monitor del motor servlet, los hilos inactivos pueden ignorarse.

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.

Utilización de la CPU a nivel de hilo (solo para la plataforma Linux):

  1. Si ha capturado 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 ID debe coincidir con el de nid de uno de los hilos.

  2. Si el hilo que utiliza la mayor parte de la CPU es el Hilo VM o cualquiera GC subprocesos, 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.

  3. Si ha confirmado el problema de memoria, capture un volcado de la pila la próxima vez que ocurra el problema.

    Ver esto Analizar problemas de memoria artículo para obtener más información sobre la captura y el análisis de los volcados de la pila.

Threads que se puede ignorar:

  • 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 hilos del pool de hilos del motor servlet que esperan nuevas conexiones.
recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f