События трассировки
Исходный код: lib/trace_events.js
Модуль trace_events предоставляет механизм для централизации информации о трассировке, генерируемой кодом V8, ядра Node.js и пользовательским кодом.
Трассировка может быть включена с помощью флага командной строки --trace-event-categories или с помощью модуля 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.dns.native: Включает захват данных трассировки для запросов DNS. -
node.environment: Включает захват вех среды Node.js. -
node.fs.sync: Включает захват данных трассировки для методов синхронного доступа к файловой системе. -
node.perf: Включает захват измерений API производительности API производительности.-
node.perf.usertiming: Включает захват только измерений и меток User Timing API производительности. -
node.perf.timerify: Включает захват только измерений timerify API производительности.
-
-
node.promises.rejections: Включает захват данных трассировки, отслеживающих количество необработанных отклонений Promise и обработанных после отклонений. -
node.vm.script: Включает захват данных трассировки для методовvmмодуля:runInNewContext(),runInContext(), иrunInThisContext(). -
v8: События V8 относятся к GC, компиляции и выполнению.
По умолчанию включены категории node, node.async_hooks, и v8.
node --trace-event-categories v8,node,node.async_hooks server.js
Предыдущие версии 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
В качестве альтернативы, события трассировки могут быть включены с помощью модуля trace_events:
const trace_events = require('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 Запуск 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 Система трассировки использует тот же источник времени, что и process.hrtime(). Однако временные метки событий трассировки выражаются в микросекундах, в отличие от process.hrtime(), который возвращает наносекунды.
Функции этого модуля недоступны в потоках Worker.
Модуль 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('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());
tracing.enable()
Включает этот объект Tracing для набора категорий, охватываемых объектом Tracing.
tracing.enabled
-
<булево значение>
trueтолько если объектTracingбыл включен.
trace_events.createTracing(options)
-
options<Объект>-
categories<массив строк> Массив имён категорий трассировки. Значения, включенные в массив, при необходимости преобразуются в строку. Если значение нельзя преобразовать, будет выброшено исключение.
-
- Возвращает: <Tracing>.
Создаёт и возвращает объект Tracing для заданного набора categories.
const trace_events = require('trace_events');
const categories = ['node.perf', 'node.async_hooks'];
const tracing = trace_events.createTracing({ categories });
tracing.enable();
// do stuff
tracing.disable();
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('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());
© 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-v16.x/docs/api/tracing.html