- assert断言
- async_hooks异步钩子
- async_hooks/context异步上下文
- buffer缓冲区
- C++插件
- C/C++插件(使用Node-API)
- C++嵌入器
- child_process子进程
- cluster集群
- CLI命令行
- console控制台
- Corepack核心包
- crypto加密
- crypto/webcrypto网络加密
- debugger调试器
- deprecation弃用
- dgram数据报
- diagnostics_channel诊断通道
- dns域名服务器
- domain域
- Error错误
- events事件触发器
- fs文件系统
- global全局变量
- http超文本传输协议
- http2超文本传输协议2.0
- https安全超文本传输协议
- inspector检查器
- Intl国际化
- module模块
- module/cjsCommonJS模块
- module/esmECMAScript模块
- module/package包模块
- net网络
- os操作系统
- path路径
- perf_hooks性能钩子
- permission权限
- policy安全策略
- process进程
- punycode域名代码
- querystring查询字符串
- readline逐行读取
- repl交互式解释器
- report诊断报告
- stream流
- stream/web网络流
- string_decoder字符串解码器
- test测试
- timers定时器
- tls安全传输层
- trace_events跟踪事件
- tty终端
- url网址
- util实用工具
- v8引擎
- vm虚拟机
- wasi网络汇编系统接口
- worker_threads工作线程
- zlib压缩
Node.js v16.18.1 文档
- Node.js 16.18.1
- ► 目录
-
►
索引
- assert 断言
- async_hooks 异步钩子
- async_hooks/context 异步上下文
- buffer 缓冲区
- C++插件
- C/C++插件(使用Node-API)
- C++嵌入器
- child_process 子进程
- cluster 集群
- CLI 命令行
- console 控制台
- Corepack 核心包
- crypto 加密
- crypto/webcrypto 网络加密
- debugger 调试器
- deprecation 弃用
- dgram 数据报
- diagnostics_channel 诊断通道
- dns 域名服务器
- domain 域
- Error 错误
- events 事件触发器
- fs 文件系统
- global 全局变量
- http 超文本传输协议
- http2 超文本传输协议2.0
- https 安全超文本传输协议
- inspector 检查器
- Intl 国际化
- module 模块
- module/cjs CommonJS模块
- module/esm ECMAScript模块
- module/package 包模块
- net 网络
- os 操作系统
- path 路径
- perf_hooks 性能钩子
- permission 权限
- policy 安全策略
- process 进程
- punycode 域名代码
- querystring 查询字符串
- readline 逐行读取
- repl 交互式解释器
- report 诊断报告
- stream 流
- stream/web 网络流
- string_decoder 字符串解码器
- test 测试
- timers 定时器
- tls 安全传输层
- trace_events 跟踪事件
- tty 终端
- url 网址
- util 实用工具
- v8 引擎
- vm 虚拟机
- wasi 网络汇编系统接口
- worker_threads 工作线程
- zlib 压缩
- ► 其他版本
- 文档搜索
目录
trace_events 跟踪事件#
源代码: lib/trace_events.js
The node:trace_events
module provides a mechanism to centralize tracing
information generated by V8, Node.js core, and userspace code.
Tracing can be enabled with the --trace-event-categories
command-line flag
or by using the node:trace_events
module. The --trace-event-categories
flag
accepts a list of comma-separated category names.
The available categories are:
node
: An empty placeholder.node.async_hooks
: Enables capture of detailedasync_hooks
trace data. Theasync_hooks
events have a uniqueasyncId
and a specialtriggerId
triggerAsyncId
property.node.bootstrap
: Enables capture of Node.js bootstrap milestones.node.console
: Enables capture ofconsole.time()
andconsole.count()
output.node.dns.native
: Enables capture of trace data for DNS queries.node.net.native
: Enables capture of trace data for network.node.environment
: Enables capture of Node.js Environment milestones.node.fs.sync
: Enables capture of trace data for file system sync methods.node.fs_dir.sync
: Enables capture of trace data for file system sync directory methods.node.fs.async
: Enables capture of trace data for file system async methods.node.fs_dir.async
: Enables capture of trace data for file system async directory methods.node.perf
: Enables capture of Performance API measurements.node.perf.usertiming
: Enables capture of only Performance API User Timing measures and marks.node.perf.timerify
: Enables capture of only Performance API timerify measurements.
node.promises.rejections
: Enables capture of trace data tracking the number of unhandled Promise rejections and handled-after-rejections.node.vm.script
: Enables capture of trace data for thenode:vm
module'srunInNewContext()
,runInContext()
, andrunInThisContext()
methods.v8
: The V8 events are GC, compiling, and execution related.node.http
: Enables capture of trace data for http request / response.
By default the node
, node.async_hooks
, and v8
categories are enabled.
node --trace-event-categories v8,node,node.async_hooks server.js
Prior versions of Node.js required the use of the --trace-events-enabled
flag to enable trace events. This requirement has been removed. However, the
--trace-events-enabled
flag may still be used and will enable the
node
, node.async_hooks
, and v8
trace event categories by default.
node --trace-events-enabled
# is equivalent to
node --trace-event-categories v8,node,node.async_hooks
Alternatively, trace events may be enabled using the node:trace_events
module:
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
Running Node.js with tracing enabled will produce log files that can be opened
in the chrome://tracing
tab of Chrome.
The logging file is by default called node_trace.${rotation}.log
, where
${rotation}
is an incrementing log-rotation id. The filepath pattern can
be specified with --trace-event-file-pattern
that accepts a template
string that supports ${rotation}
and ${pid}
:
node --trace-event-categories v8 --trace-event-file-pattern '${pid}-${rotation}.log' server.js
To guarantee that the log file is properly generated after signal events like
SIGINT
, SIGTERM
, or SIGBREAK
, make sure to have the appropriate handlers
in your code, such as:
process.on('SIGINT', function onSigint() {
console.info('Received SIGINT.');
process.exit(130); // Or applicable exit code depending on OS and signal
});
The tracing system uses the same time source
as the one used by process.hrtime()
.
However the trace-event timestamps are expressed in microseconds,
unlike process.hrtime()
which returns nanoseconds.
The features from this module are not available in Worker
threads.
node:trace_events 模块#
`Tracing` 对象#
The Tracing
object is used to enable or disable tracing for sets of
categories. Instances are created using the trace_events.createTracing()
method.
When created, the Tracing
object is disabled. Calling the
tracing.enable()
method adds the categories to the set of enabled trace event
categories. Calling tracing.disable()
will remove the categories from the
set of enabled trace event categories.
tracing.categories
#
A comma-separated list of the trace event categories covered by this
Tracing
object.
tracing.disable()
#
Disables this Tracing
object.
Only trace event categories not covered by other enabled Tracing
objects
and not specified by the --trace-event-categories
flag will be disabled.
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());
tracing.enable()
#
Enables this Tracing
object for the set of categories covered by the
Tracing
object.
tracing.enabled
#
- <boolean>
true
only if theTracing
object has been enabled.
trace_events.createTracing(options)
#
options
<Object>categories
<string[]> An array of trace category names. Values included in the array are coerced to a string when possible. An error will be thrown if the value cannot be coerced.
- 返回: <Tracing>.
Creates and returns a Tracing
object for the given set of 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();
trace_events.getEnabledCategories()
#
- 返回: <string>
Returns a comma-separated list of all currently-enabled trace event
categories. The current set of enabled trace event categories is determined
by the union of all currently-enabled Tracing
objects and any categories
enabled using the --trace-event-categories
flag.
Given the file test.js
below, the command
node --trace-event-categories node.perf test.js
will print
'node.async_hooks,node.perf'
to the console.
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());
示例#
通过检查器收集跟踪事件数据#
'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();