GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo rastrear un programa java?

Como mencionó ckhan, jstack es excelente porque brinda el seguimiento completo de la pila de todos los subprocesos activos en la JVM. Lo mismo se puede obtener en stderr de la JVM usando SIGQUIT.

Otra herramienta útil es jmap que puede tomar un volcado de pila del proceso JVM usando el PID del proceso:

jmap -dump:file=/tmp/heap.hprof $PID

Este volcado de pila se puede cargar en herramientas como visualvm (que ahora es parte de la instalación estándar de Oracle java sdk, llamada jvisualvm). Además, VisualVM puede conectarse a la JVM en ejecución y mostrar información sobre la JVM, incluida la visualización de gráficos del uso interno de la CPU, el recuento de subprocesos y el uso del almacenamiento dinámico, lo que es ideal para rastrear fugas.

Otra herramienta, jstat , puede recopilar estadísticas de recolección de basura para la JVM durante un período de tiempo similar a vmstat cuando se ejecuta con un argumento numérico (por ejemplo, vmstat 3 ).

Finalmente, es posible usar un agente Java para impulsar la instrumentación en todos los métodos de todos los objetos en el momento de la carga. La biblioteca javassist puede ayudar a que esto sea muy fácil de hacer. Por lo tanto, es factible agregar su propio seguimiento. La parte difícil de eso sería encontrar una manera de obtener resultados de seguimiento solo cuando lo desea y no todo el tiempo, lo que probablemente ralentizaría la JVM. Hay un programa llamado dtrace que funciona de una manera como esta. Lo he intentado, pero no tuve mucho éxito. Tenga en cuenta que los agentes no pueden instrumentar todas las clases porque las que se necesitan para iniciar la JVM se cargan antes de que el agente pueda instrumentar, y luego es demasiado tarde para agregar instrumentación a esas clases.

Mi sugerencia - Comience con VisualVM y vea si eso le dice lo que necesita saber, ya que puede mostrar los subprocesos actuales y estadísticas importantes para la JVM.


Del mismo modo, al depurar programas que han fallado en un sistema Linux, puede usar herramientas similares para depurar JVM en ejecución en su sistema.

Herramienta n.º 1:jvmtop

Similar a top , puede usar jvmtop para ver en qué clases están las JVM en ejecución en su sistema. Una vez instalado lo invocas así:

$ jvmtop.sh

Su salida tiene un estilo similar para parecerse a la herramienta top :

 JvmTop 0.8.0 alpha   amd64  8 cpus, Linux 2.6.32-27, load avg 0.12
 http://code.google.com/p/jvmtop

  PID MAIN-CLASS      HPCUR HPMAX NHCUR NHMAX    CPU     GC    VM USERNAME   #T DL
 3370 rapperSimpleApp  165m  455m  109m  176m  0.12%  0.00% S6U37 web        21
11272 ver.resin.Resin [ERROR: Could not attach to VM]
27338 WatchdogManager   11m   28m   23m  130m  0.00%  0.00% S6U37 web        31
19187 m.jvmtop.JvmTop   20m 3544m   13m  130m  0.93%  0.47% S6U37 web        20
16733 artup.Bootstrap  159m  455m  166m  304m  0.12%  0.00% S6U37 web        46

Herramienta n.º 2:jvmmonitor

Otra alternativa es usar jvmmonitor. JVM Monitor es un perfilador de Java integrado con Eclipse para monitorear el uso de la CPU, los subprocesos y la memoria de las aplicaciones Java. Puede usarlo para encontrar automáticamente JVM en ejecución en el host local o puede conectarse a JVM remotas usando un [email protected]

Herramienta n.° 3:VisualVM

visualvm es probablemente "la herramienta" a la que recurrir al depurar problemas con la JVM. Su conjunto de funciones es bastante profundo y puede obtener una mirada muy profunda a las entrañas.

Perfile el rendimiento de la aplicación o analice la asignación de memoria:

Tomar y mostrar volcados de hilos:

Referencias

  • tutorial de VisualVM

Considere jstack .No coincide exactamente con strace , más de un pstack -analógico, pero al menos le dará una imagen de una instantánea en el tiempo. Podría unirlos para obtener un rastro crudo si fuera necesario.

Consulte también las sugerencias en este artículo SO:https://stackoverflow.com/questions/1025681/call-trace-in-java


Linux
  1. Linux:¿cómo rastrear un programa Java?

  2. Cómo desbloquear una IP en CSF

  3. Cómo actualizar Ubuntu 20.04 a Ubuntu 21.04

  4. Cómo rastrear scripts de Python usando trace.py

  5. ¿Cómo rastrear operaciones de E/S por archivo en Linux?

Cómo construir un paquete plano

Cómo rastrear la ejecución del programa usando el comando Strace de Linux

Cómo buscar en Nano

Cómo instalar OmniOS ce

Cómo rastrear y rastrear un proceso de Linux

cómo verificar el tamaño del montón asignado para jvm por linux