События отслеживания
Исходный код: lib/trace_events.js
Модуль node:trace_events предоставляет механизм централизованного сбора информации о трассировке, генерируемой кодом V8, ядра Node.js и пользовательского пространства.
Отслеживание можно включить с помощью флага командной строки --trace-event-categories или с помощью модуля node:trace_events. Флаг --trace-event-categories принимает список имен категорий, разделенных запятыми.
Доступные категории:
-
node: Пустой заполнитель. -
node.async_hooks: Включает захват подробных данных трассировкиasync_hooks. Событияasync_hooksимеют уникальныйasyncIdи специальное свойствоtriggerIdtriggerAsyncId. -
node.bootstrap: Включает захват вех Node.js при загрузке. -
node.console: Включает захват выводаconsole.time()иconsole.count(). -
node.threadpoolwork.sync: Включает захват данных трассировки для синхронных операций в пуле потоков, таких какblob,zlib,cryptoиnode_api. -
node.threadpoolwork.async: Включает захват данных трассировки для асинхронных операций в пуле потоков, таких какblob,zlib,cryptoиnode_api. -
node.dns.native: Включает захват данных трассировки для запросов DNS. -
node.net.native: Включает захват данных трассировки для сетевых операций. -
node.environment: Включает захват вех Node.js среды. -
node.fs.sync: Включает захват данных трассировки для синхронных методов файловой системы. -
node.fs_dir.sync: Включает захват данных трассировки для синхронных методов каталогов файловой системы. -
node.fs.async: Включает захват данных трассировки для асинхронных методов файловой системы. -
node.fs_dir.async: Включает захват данных трассировки для асинхронных методов каталогов файловой системы. -
node.perf: Включает захват измерений API производительности Performance API.-
node.perf.usertiming: Включает захват только измерений и меток User Timing API производительности. -
node.perf.timerify: Включает захват только измерений timerify API производительности.
-
-
node.promises.rejections: Включает захват данных трассировки, отслеживающих количество необработанных отклонений Promise и обработаны-после-отклонений. -
node.vm.script: Включает захват данных трассировки для методовnode:vmмодуляrunInNewContext(),runInContext(), иrunInThisContext(). -
v8: События V8 относятся к сборке мусора, компиляции и выполнению. -
node.http: Включает захват данных трассировки для запросов/ответов http.
По умолчанию включены категории node, node.async_hooks, и v8.
node --trace-event-categories v8,node,node.async_hooks server.js copy
Предыдущие версии Node.js требовали использования флага --trace-events-enabled для включения событий отслеживания. Это требование было удалено. Однако, флаг --trace-events-enabled может быть использован и по умолчанию включит категории событий отслеживания node, node.async_hooks, и v8.
node --trace-events-enabled # is equivalent to node --trace-event-categories v8,node,node.async_hooks copy
В качестве альтернативы, события отслеживания можно включить с помощью модуля node:trace_events:
const trace_events = require('node:trace_events');
const tracing = trace_events.createTracing({ categories: ['node.perf'] });
tracing.enable(); // Enable trace event capture for the 'node.perf' category
// do work
tracing.disable(); // Disable trace event capture for the 'node.perf' category copy Запуск Node.js с включенным отслеживанием создаст файлы журналов, которые можно открыть в вкладке chrome://tracing Chrome.
Файл журнала по умолчанию называется node_trace.${rotation}.log, где ${rotation} — это нарастающий идентификатор вращения журнала. Шаблон пути к файлу можно указать с помощью --trace-event-file-pattern, который принимает строку шаблона, поддерживающую ${rotation} и ${pid}:
node --trace-event-categories v8 --trace-event-file-pattern '${pid}-${rotation}.log' server.js copy Для обеспечения правильной генерации файла журнала после сигнальных событий, таких как SIGINT, SIGTERM, или SIGBREAK, убедитесь, что в вашем коде есть соответствующие обработчики, такие как:
process.on('SIGINT', function onSigint() {
console.info('Received SIGINT.');
process.exit(130); // Or applicable exit code depending on OS and signal
}); copy Система отслеживания использует тот же источник времени, что и process.hrtime(). Однако метки времени событий отслеживания выражены в микросекундах, в отличие от process.hrtime() которое возвращает наносекунды.
Функциональность этого модуля недоступна в потоках Worker.
Модуль node:trace_events
Tracing объект
Объект Tracing используется для включения или отключения отслеживания для наборов категорий. Экземпляры создаются с помощью метода trace_events.createTracing().
При создании объект Tracing выключен. Вызов метода tracing.enable() добавляет категории в набор включенных категорий событий отслеживания. Вызов tracing.disable() удалит категории из набора включенных категорий событий отслеживания.
tracing.categories
Список категорий событий отслеживания, разделенных запятыми, охватываемых этим объектом Tracing.
tracing.disable()
Отключает этот объект Tracing.
Только категории событий отслеживания, не охватываемые другими включенными объектами Tracing, и не указанные флагом --trace-event-categories будут отключены.
const trace_events = require('node:trace_events');
const t1 = trace_events.createTracing({ categories: ['node', 'v8'] });
const t2 = trace_events.createTracing({ categories: ['node.perf', 'node'] });
t1.enable();
t2.enable();
// Prints 'node,node.perf,v8'
console.log(trace_events.getEnabledCategories());
t2.disable(); // Will only disable emission of the 'node.perf' category
// Prints 'node,v8'
console.log(trace_events.getEnabledCategories()); copy
tracing.enable()
Включает этот объект Tracing для набора категорий, охватываемых объектом Tracing.
tracing.enabled
-
<логическое значение>
trueтолько если объектTracingбыл включен.
trace_events.createTracing(options)
-
options<объект>-
categories<массив строк> Массив имен категорий отслеживания. Значения, включенные в массив, при необходимости преобразуются в строку. Будет выброшено исключение, если значение нельзя преобразовать.
-
- Возвращает: <Tracing>.
Создаёт и возвращает объект Tracing для заданного набора categories.
const trace_events = require('node:trace_events');
const categories = ['node.perf', 'node.async_hooks'];
const tracing = trace_events.createTracing({ categories });
tracing.enable();
// do stuff
tracing.disable(); copy
trace_events.getEnabledCategories()
- Возвращает: <строка>
Возвращает список, разделенный запятыми, всех включенных в настоящее время категорий событий отслеживания. Текущий набор включенных категорий событий отслеживания определяется объединением всех включенных в настоящее время объектов Tracing и любых категорий, включенных с помощью флага --trace-event-categories.
Учитывая файл test.js ниже, команда node --trace-event-categories node.perf test.js выведет 'node.async_hooks,node.perf' в консоль.
const trace_events = require('node:trace_events');
const t1 = trace_events.createTracing({ categories: ['node.async_hooks'] });
const t2 = trace_events.createTracing({ categories: ['node.perf'] });
const t3 = trace_events.createTracing({ categories: ['v8'] });
t1.enable();
t2.enable();
console.log(trace_events.getEnabledCategories()); copy Примеры
Сбор данных событий отслеживания с помощью инспектора
'use strict';
const { Session } = require('inspector');
const session = new Session();
session.connect();
function post(message, data) {
return new Promise((resolve, reject) => {
session.post(message, data, (err, result) => {
if (err)
reject(new Error(JSON.stringify(err)));
else
resolve(result);
});
});
}
async function collect() {
const data = [];
session.on('NodeTracing.dataCollected', (chunk) => data.push(chunk));
session.on('NodeTracing.tracingComplete', () => {
// done
});
const traceConfig = { includedCategories: ['v8'] };
await post('NodeTracing.start', { traceConfig });
// do something
setTimeout(() => {
post('NodeTracing.stop').then(() => {
session.disconnect();
console.log(data);
});
}, 1000);
}
collect(); copy
© Joyent, Inc. and other Node contributors
Licensed under the MIT License.
Node.js is a trademark of Joyent, Inc. and is used with its permission.
We are not endorsed by or affiliated with Joyent.
https://nodejs.org/dist/latest-v18.x/docs/api/tracing.html