Перейти до вмісту

Моніторинг і профілювання

Записуйте файли JFR, знімайте дампи купи, спостерігайте за запущеним процесом Elide через jcmd, jps і jstat та профілюйте з Linux perf за допомогою прапорців інструментування.

На цій сторінці

Прапорці інструментування записують, що робить процес Elide під час роботи.

ПитанняЗаписЧим переглядати
Що сталося під час запуску?--jfr=run.jfrjfr з JDK
Що лежить у купі?--heap-dump=heap.hprofVisualVM
Як купа поводиться з часом?--vmstatjps, jstat
Що робить запущений процес?jcmd PIDJFR, дампи купи, стеки потоків
Де скомпільований код витрачає час CPU?--jitdump=DIRLinux perf

Список прапорців виводить elide help instruments. Вони діють для run, а також для скриптів, фрагментів і модулів. Вказуйте їх перед будь-яким -- або -m MODULE. Встановлений JDK 25 надає jfr, jcmd, jps і jstat; VisualVM читає дампи купи. Про покриття, трасування CPU і налагоджувачі див. Налагодження. Щоб експортувати трасування, метрики й журнали до системи спостережуваності, див. OpenTelemetry.

Запис через JFR

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

--jfr використовує налаштування profile і зберігає запис під час звичайного завершення. --jfr-settings=default або шлях до .jfc вибирає інші налаштування. Імена файлів і налаштування не можуть містити коми та подвійні лапки.

ПодіяЩо записує
dev.elide.BootЗапуск завершено; elapsedNanos — час запуску.
dev.elide.GuestStart / dev.elide.GuestStopВиконання програми точки входу: мова, тривалість, результат, код виходу.
dev.elide.HttpRequest / dev.elide.HttpResponseОдин обслужений запит: метод, протокол, статус, тривалість.
dev.elide.HttpClientExchangeОдин вихідний запит: час у черзі та на підключення, протокол, статус і байти тіла.
dev.elide.TransportTlsHandshakeОдне TLS-рукостискання: тривалість, роль, результат і ALPN.
dev.elide.ExecutionКоманда завершилася, з її кодом виходу.

URL-адреси, заголовки й корисне навантаження не записуються.

Дамп купи

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

--heap-dump записує дамп під час звичайного завершення. --heap-dump-on-oom записує його в разі помилки браку пам’яті й потім завершує процес без запуску хуків завершення.

Спостереження за запущеним процесом

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

--vmstat робить процес видимим у jps (за PID, без імені) і дозволяє jstat знімати з нього показники. jcmd під’єднується за PID з --vmstat або без нього, у Linux і macOS, від того самого користувача ОС:

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

Примусово зупинений процес не записує свої дані. Збережіть поточний запис через jcmd, перш ніж зупинити процес.

Профілювання з perf у 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 працює в релізних збірках для Linux. Не видаляйте каталог jitdump, доки не завершиться perf inject. Часто виконувані функції з’являються під об’єктами jitted-. Нульовий код виходу не гарантує коректного запису; перевірте, що у звіті видно ваші функції. У WSL2 версія perf має відповідати запущеному ядру.

Параметри VM

Кожен прапорець має запис у вигляді параметра 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 записує дамп початкової купи й завершує роботу. -Xmx і -XX:MaxHeapSize — те саме налаштування, що й --max-mem; передавати обидва — помилка.

Чи була ця сторінка корисною?