Saltar al contenido

Monitorización y perfilado

Grabe archivos JFR, vuelque el heap, observe un proceso de Elide en ejecución con jcmd, jps y jstat, y perfile con perf de Linux mediante las opciones de instrumentación.

En esta página

Las opciones de instrumentación registran lo que hace un proceso de Elide mientras se ejecuta.

PreguntaCapturaInspeccionar con
¿Qué ocurrió durante la ejecución?--jfr=run.jfrjfr del JDK
¿Qué hay en el heap?--heap-dump=heap.hprofVisualVM
¿Cómo se comporta el heap con el tiempo?--vmstatjps, jstat
¿Qué hace un proceso en ejecución?jcmd PIDJFR, volcados del heap, pilas de hilos
¿Dónde gasta tiempo de CPU el código compilado?--jitdump=DIRperf de Linux

Liste las opciones con elide help instruments. Se aplican a run y a scripts, fragmentos y módulos. Póngalas antes de cualquier -- o -m MODULE. Una instalación del JDK 25 proporciona jfr, jcmd, jps y jstat; VisualVM lee los volcados del heap. Para cobertura, trazado de CPU y depuradores, consulte Depuración. Para exportar trazas, métricas y registros a un backend de observabilidad, consulte OpenTelemetry.

Grabar con JFR

elide --jfr=run.jfr run app.js
jfr summary run.jfr
jfr print --events 'dev.elide.*' run.jfr

--jfr usa la configuración profile y guarda al salir normalmente. --jfr-settings=default o una ruta .jfc elige otra configuración. Los nombres de archivo y la configuración no pueden contener comas ni comillas dobles.

EventoRegistra
dev.elide.BootEl arranque terminó; elapsedNanos es el tiempo de arranque.
dev.elide.GuestStart / dev.elide.GuestStopEjecución del programa de entrada, con lenguaje, duración, resultado y código de salida.
dev.elide.HttpRequest / dev.elide.HttpResponseUna petición atendida, con método, protocolo, estado y duración.
dev.elide.HttpClientExchangeUna petición saliente, con tiempo en cola y de conexión, protocolo, estado y bytes del cuerpo.
dev.elide.TransportTlsHandshakeUn handshake TLS, con duración, rol, resultado y ALPN.
dev.elide.ExecutionEl comando terminó, con su código de salida.

No se registran URL, cabeceras ni cargas útiles.

Volcar el heap

elide --heap-dump=heap.hprof run app.js
elide --heap-dump-on-oom=oom.hprof run app.js
visualvm --openfile heap.hprof

--heap-dump escribe al salir normalmente. --heap-dump-on-oom escribe ante un error de falta de memoria y después termina sin ejecutar los hooks de apagado.

Observar un proceso en ejecución

elide --vmstat run app.js &
jps -l
jstat -gc PID 1s

--vmstat muestra el proceso en jps (por PID, sin nombre) y permite que jstat lo muestree. jcmd se conecta por PID con o sin --vmstat, en Linux y macOS, con el mismo usuario del sistema operativo:

jcmd PID help
jcmd PID JFR.start name=profile settings=profile
jcmd PID JFR.dump name=profile filename=live.jfr
jcmd PID GC.heap_dump live.hprof
jcmd PID Thread.print

Un proceso terminado a la fuerza no escribe sus capturas. Vuelque una grabación en curso con jcmd antes de detenerlo.

Perfilar con perf en Linux

perf record -k 1 --call-graph fp -o perf.data -- elide --jitdump=./jitdump run app.js
perf inject -j -i perf.data -o perf.jit.data
perf report -i perf.jit.data

--jitdump funciona en las compilaciones release para Linux. Conserve el directorio jitdump hasta que termine perf inject. Las funciones que se ejecutan con frecuencia aparecen bajo objetos jitted-. Un código de salida cero no garantiza una captura válida; compruebe que el informe muestra sus funciones. En WSL2, perf debe coincidir con el kernel en ejecución.

Opciones de la VM

Cada opción tiene una forma equivalente como opción de la VM:

--jfr=run.jfr                 -XX:StartFlightRecording=filename=run.jfr,settings=profile,dumponexit=true
--heap-dump-on-oom=oom.hprof  -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=oom.hprof -XX:+ExitOnOutOfMemoryError
--vmstat                      -XX:+UsePerfData
--jitdump=DIR                 -XX:+RuntimeJitdump -XX:RuntimeJitdumpDir=DIR

-XX:+DumpHeapAndExit -XX:HeapDumpPath=initial.hprof vuelca el heap inicial y después termina. -Xmx y -XX:MaxHeapSize son el mismo ajuste que --max-mem; pasar ambos es un error.

¿Te resultó útil esta página?