События трассировки
Исходный код: 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: Включает захват только измерений и меток пользовательского времени 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-v20.x/docs/api/tracing.html