Tomar volcados de hilos de una JVM

Descripción description

Entorno

Experience Manager

Problema/Síntomas

¿Cómo tomar volcados de hilos de una JVM en Linux, UNIX o Windows?

Un volcado de hilos es una lista de todos los hilos Java que están activos actualmente en una máquina virtual Java (JVM).

Existen varias formas de tomar volcados de hilos de una JVM. Se recomienda encarecidamente tomar más de 1 volcado de hilos. Una buena práctica es tomar 10 volcados de hilos a intervalos regulares (por ejemplo, un volcado de hilos cada diez segundos).

Resolución resolution

Paso 1: Obtención del PID del proceso de Java

La primera parte de información que necesitará para poder obtener un volcado de hilos es el PID de su proceso Java.

El JDK de Java se envía con el comando jps, que enumera todos los ID de proceso de Java. Puede ejecutar este comando de la siguiente manera:

jps -l 70660 sun.tools.jps.Jps 70305

Nota:  En Linux y UNIX, es posible que tenga que ejecutar este comando como  sudo -u usuario jps -l, donde "usuario" es el nombre de usuario del usuario con el que se ejecuta el proceso Java.

Si esto no funciona o sigue sin encontrar el proceso Java (ruta no establecida, JDK no instalado o versión de Java anterior), utilice

  • UNIX, Linux y Mac OS X:  ps -el | grep java
  • Windows: presione Ctrl+Mayús+Esc para abrir el administrador de tareas y encontrar el PID del proceso de Java

Paso 2: Solicitar un volcado de hilos de la JVM

pila

Si está instalado/disponible, se recomienda utilizar el  pila  herramienta. Imprime volcados de hilos en la consola de la línea de comandos.

Para obtener un volcado de hilos mediante jstack, ejecute el siguiente comando:
jstack -l < pid>

Puede generar volcados de procesos consecutivos en un archivo utilizando la directiva de redireccionamiento/anexado de salida de la consola:
jstack -l < pid> > > threaddumps.log

Notas:

  • La herramienta jstack está disponible desde JDK 1.5 (para JVM en Windows, solo está disponible en algunas versiones de JDK 1.5 y JDK 1.6).

  • jstack funciona incluso si -Xrs el parámetro jvm está habilitado

  • No es posible utilizar la herramienta jstack de JDK 1.6 para tomar los volcados de proceso de un proceso que se ejecuta en JDK 1.5.

  • En Linux y UNIX, debe ejecutar el comando como el usuario propietario del proceso java:

    sudo -u  java-user  jstack -l < pid>

    (< java-user> debe reemplazarse por el id del usuario con el que se ejecuta el proceso Java)

  • En Windows, si ejecuta jstack y obtiene el error "No hay suficiente almacenamiento disponible para procesar este comando", debe ejecutar jstack como el usuario de sistema de Windows o el usuario propietario del proceso java.  Puede hacerlo utilizando psexec, que puede descargar aquí. Para ejecutar jstack como usuario SYSTEM, utilice un comando como este:

    psexec -s jstack < pid>   > > threaddumps.log

    Si no puede instalar psexec en el servidor, puede crear un archivo .bat que contenga el comando y ejecutarlo usar el programador de tareas de Windows (como un usuario diferente).

  • Si el proceso java no responde, a veces puede resultar útil utilizar la opción  -J-d64  (en sistemas de 64 bits), por ejemplo:

    jstack -J-d64 -l  <pid>  > > threaddumps.log

  • Si el comando jstack (jstack -l < pid> > > threaddumps.log) genera el error [ 1] a continuación, ejecute el comando como el usuario propietario del proceso java.  Por ejemplo:

    sudo -u sling jstack -l < pid> > > threaddumps.log

Error attaching to process: sun.jvm.hotspot.debugger.DebuggerException: Can't attach to the process: ptrace(PTRACE_ATTACH, ..) failed for 22893: Operation not permitted

sun.jvm.hotspot.debugger.DebuggerException: sun.jvm.hotspot.debugger.DebuggerException: Can't attach to the process: ptrace(PTRACE_ATTACH, ..) failed for 22893: Operation not permitted

...

Caused by: sun.jvm.hotspot.debugger.DebuggerException: Can't attach to the process: ptrace(PTRACE_ATTACH, ..) failed for 22893: Operation not permitted

...

sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal$LinuxDebuggerLocalWorkerThread.run(LinuxDebuggerLocal.java:138)

SCRIPT JSTACK

Aquí tiene una script (adaptado del de eclipse.org) que tomará una serie de volcados de hilos usando jstack.  También toma el uso de la cpu a nivel de hilo usando también el comando top.

Solo ejecútelo de esta manera:
sudo -u *< usuario>*jstackSeries.sh < pid>  < aemserveruser>  < count>  < delay>

Por ejemplo:
sudo -u aemuser jstackSeries.sh 1234 aemserveruser 10 3

  • 1234  es el pid del proceso de Java
  • cq5serveruser  es el usuario de Linux o UNIX con el que se ejecuta el proceso Java
  • 10  es cuántos volcados de hilos hay que tomar
  • 3  es el retardo entre cada volcado

Nota:  La salida superior tiene el ID de subproceso nativo en formato decimal, mientras que la salida jstack tiene el nid en hexadecimal.  Puede hacer coincidir el hilo de cpu superior con el resultado de jstack convirtiendo el ID del hilo en hexadecimal.

Además de la secuencia de comandos anterior, también tenemos una Script de Windows PowerShell y un script específico de la interfaz de usuario de Adobe AEM de GitHubGitHub.

FORMAS ALTERNATIVAS DE OBTENER UN VOLCADO DE PROCESOS

Si la variable  pila  La herramienta no está disponible para usted, entonces puede tomar volcados de hilos de la siguiente manera:

Nota:  Algunas herramientas no pueden tomar volcados de hilos de la JVM si el parámetro de línea de comandos -Xrs está activada. Si tiene problemas para tomar volcados de hilos, compruebe si esta opción está habilitada.

UNIX, Mac OS X y Linux (JDK 1.4 o versión inferior)

En UNIX, Mac OS X y Linux, puede enviar una señal QUIT al proceso Java para indicarle que envíe un volcado de hilos a la salida estándar.

  1. Ejecute este comando para hacerlo:

    kill -QUIT  <pid>

    Es posible que tenga que ejecutar este comando como  sudo -u usuario kill -QUIT  <pid>  donde "user" es el usuario con el que se ejecuta el proceso Java.

  2. Si está iniciando CQSE utilizando el  crx-quickstart/server/start  a continuación, los volcados de hilos se enviarán a  crx-quickstart/server/logs/startup.log. Si utiliza un servidor de aplicaciones de terceros como JBoss, WebSphere, Tomcat u otro, consulte la documentación del servidor para saber a qué archivo se dirige la salida estándar.

Windows:

JDK 1.X

  1. Descargue javadump.exe (adjunto a continuación).

  2. Inicie la JVM con estos tres argumentos (deben estar en el orden correcto):

    -XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=C:\temp\jvmoutput.log

  3. Presione Ctrl+Mayús+Esc para abrir el Administrador de tareas.

  4. Busque el PID del proceso de Java.

  5. Desde la línea de comandos, ejecute

    javadump.exe  <pid>

  6. El volcado de hilos aparecerá en la jvmoutput.log archivo mencionado en el paso 2.

JDK 1.6

Obtener un volcado de hilos de  jconsole  herramienta, mediante un complemento: [ 0]

Así se puede solicitar un volcado de hilos:

  1. Añada el siguiente parámetro a la comunicación jvm que ejecuta:  -Dcom.sun.management.jmxremote

  2. Descargue e instale JDK 1.6 (si aún no lo ha hecho).

  3. Descargue y extraiga Utilidad Analizador de volcado de procesos. [ 1]

  4. Ejecutar jconsole.exe de JDK 1.6:

    jconsole.exe -pluginpath /path/to/file/tda.jar

  5. Haga clic en  Volcados de hilos  pestaña.

  6. Haga clic en  Solicitar volcado de procesos  vínculo.

Nota:  AEM Si está ejecutando la 6 de la.* y desea observar los hilos en ejecución, puede solicitar http://<host>:<port>/system/console/status-Threads para obtener una lista de subprocesos. Sin embargo, tenga en cuenta que estos volcados de hilos no funcionarán con herramientas de análisis de volcado de hilos como samurai o tda.

Se aplica a

Todos los productos de Adobe que se ejecutan en una JVM

Herramientas de análisis de volcado de hilos:

[ 0]  PsExec v2.42 en Sysinternals en la documentación de Microsoft.
[ 1] TDA: analizador de volcado de procesos en irockel/tda en Github.com.
[ 2]  Analizador de volcado de procesos Java en FastThread.
[ 3]  Analizador de volcado de subprocesos y monitores de IBM para Java en la documentación del Asistente de soporte de IBM.

recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f