Cristian Spinetta
Software developer.
jps
Lista los procesos Java en ejecución
Hay más! Estos son los más usados...
jstack
Permite obtener el stack de todos los threads creados por un proceso Java
jmap
Permite obtener información sobre el mapeo a memoria de un proceso Java
jstat
Permite obtener información sobre el uso de recursos y la perfomance de un proceso Java
Java Mission Control
Suite con interface gráfica para hacer profiling y obtener info relevante de performance
Java VisualVM
Similar a Java Mission Control
-l mostrar paquete de la clase main
o del jar con el que se inicio
-v mostrar parámetros que
se pasaron a la JVM
Listar los procesos Java en ejecución
Útil para encontrar fácilmente el pid de un proceso Java
No lista los procesos Java de otro usuario (para eso usar ps)
Los parámetros listados por -v pueden estar truncados.
> cat /proc/[pid]/cmdline
Para verlo completo:
> jstack [pid]
Permite obtener el stack de todos los threads creados por un proceso Java
Útil para ver lo que están haciendo los threads en ese instante
> jmap [pid]
Permite obtener información sobre el mapeo a memoria de un proceso Java
Muestra las lib compartidas que usa el proceso (shared objects)
> jmap -dump:[live,] [pid]
Dump del heap de la JVM en formato hprof
[live] fuerza una corrida de la c para que el dump solo contenga los objetos vivos
> jmap -histo[:live] [pid]
Imprime un histograma de la heap
> jmap -clstats [pid]
Estadística sobre los class loaders
> jmap -finalizerinfo [pid]
Info sobre objetos que están esperan la ejecución de su finalize()
Muestra por cada clase:
> jmap -heap [pid]
Resumen sobre la GC, configuración y estadísticas del uso de la memoria
Imprime un histograma de la heap
[live] fuerza una corrida de la c para que el dump solo contenga los objetos vivos
> jmap -histo[:live] [pid]
> jstat -gcutil [pid]
Permite obtener información sobre la performance y el uso de recursos de un proceso Java
Resumen de estadísticas de la gc y la memoria.
> jstat -gccause [pid]
gcutil + causa que desencadenó las 2 últimos eventos de gc.
> jstat -gcmetacapacity [pid]
Estadísticas sobre el área de mtespace.
> jstat -printcompilation [pid]
Estadísticas sobre los métodos compilados.
> jstat -class [pid]
Estadísticas sobre los class loaders.
> jstat -compiler [pid]
Estadísticas sobre el compilador JIT.
> jstat [option] [output-options] [pid] [interval] [count]
Y hay algunas opciones más...
despegar@h-bkd-shopping-00:~$ jstat -gcutil 18330 1s
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
5.55 0.00 23.36 45.75 93.72 91.37 23124 749.071 104 10.855 759.926
5.55 0.00 33.67 45.75 93.72 91.37 23124 749.071 104 10.855 759.926
5.55 0.00 44.54 45.75 93.72 91.37 23124 749.071 104 10.855 759.926
5.55 0.00 64.37 45.75 93.72 91.37 23124 749.071 104 10.855 759.926
5.55 0.00 74.08 45.75 93.72 91.37 23124 749.071 104 10.855 759.926
5.55 0.00 80.24 45.75 93.72 91.37 23124 749.071 104 10.855 759.926
5.55 0.00 87.50 45.75 93.72 91.37 23124 749.071 104 10.855 759.926
0.00 7.67 20.10 45.84 93.72 91.37 23125 749.123 104 10.855 759.977
0.00 7.67 36.74 45.84 93.72 91.37 23125 749.123 104 10.855 759.977
0.00 7.67 46.46 45.84 93.72 91.37 23125 749.123 104 10.855 759.977
0.00 7.67 68.73 45.84 93.72 91.37 23125 749.123 104 10.855 759.977
0.00 7.67 75.11 45.84 93.72 91.37 23125 749.123 104 10.855 759.977
0.00 7.67 86.45 45.84 93.72 91.37 23125 749.123 104 10.855 759.977
5.27 0.00 2.21 45.92 93.72 91.37 23126 749.156 104 10.855 760.010
(1)
(2)
En (1) se ve que el Eden tiene 87,5% de ocupación y S0 tiene una ocupación de 5,55% de objetos que sobrevivieron al anterior Young GC.
Hasta aquí el Young-GC se ejecutó 23.124 veces, con un tiempo de pausa total de 749,071 segundos. Y el Old-GC ejecutó 104 veces, con un tiempo de pausa total de 10,855 segundos.
En la linea (2), el Eden bajó a 20,10% , S0 quedó vacío, y S1 quedó con 7,67% de objetos que sobrevivieron. El contador de Young-GC se incrementó a 23.125 y el tiempo total en Young-GC aumentó a 749,123 segundos. La Old aumentó a 45,84% por objetos que fueron promocionados del S0. La Old-GC no se ejecutó.
¡ Muchas Gracias !
Cristian Spinetta
@c_spinetta
@cspinetta
Bonus!
Async profiling, flame graph, MAT, false sharing...
By Cristian Spinetta
A short presentation about tools for troubleshooting on the JVM.