- NodeJs的介绍及使用
- Node.js核心模块概览
- NodeJs-Assertion Testing
- NodeJs-Asynchronous Context Tracking
- NodeJs-async_hooks
- NodeJs-Buffer
- Node.js- C++ Addons
- Node.js-C++ Addons Node-API
- NodeJs-C++ Embedder API
- Node.js-Child Process
- NodeJs-Cluster
- Node.js-命令行选项
- Node.js-Console
- Node.js-Corepack
- Node.js-Crypto
- NodeJs-Debugger
- NodeJs-Diagnostics Channel
- NodeJs-DNS
- NodeJs-Domain
- NodeJs-Errors
- NodeJs-Events
- NodeJs-File system(一)
- NodeJs-File system(二)
- NodeJs-File system(三)
- NodeJs-Globals
- NodeJs-HTTP
- NodeJs-HTTP/2
- NodeJs-HTTPS
- NodeJs-Inspector
- NodeJs-Internationalization
- NodeJs-Modules CommonJS modules、ECMAScript modules、node:module、Packages、TypeScript
- NodeJs-Net
- NodeJs-OS
- NodeJs-path
- NodeJs-Performance Hooks
- NodeJs-Permissions
- NodeJs-process
- NodeJs-punycode
- Node.js-querystring
- NodeJs-Readline
- NodeJs-REPL
- NodeJs-Report
- NodeJs-Single Executable Applications
- NodeJs-SQLite
- NodeJs-Stream
- NodeJs-String Decoder
- NodeJs-Test runner
- NodeJs-Timers
- NodeJs-TLS/SSL
- NodeJs-Trace events
- NodeJs-TTY
- NodeJs-UDP/datagram
- NodeJs-URL
- NodeJs-Utilities
- NodeJs-V8
- NodeJs-VM
- NodeJs-WASI
- NodeJs-Web Crypto API
- NodeJs Web Streams API
- NodeJs Worker threads
- NodeJs-Zlib
- NodeJs-Single Executable Applications
NodeJs-Trace events
class Trace eventsTrace Events
模块是 Node.js 提供的一种机制,允许用户跟踪应用程序的性能和活动。它通过跟踪系统的各个部分(如 HTTP
请求、文件系统访问、模块加载等)来帮助开发者识别性能瓶颈、调试问题以及获取更多关于应用行为的洞察。Trace Events
模块的输出通常是 Chrome Trace 事件格式,这样你可以在浏览器中使用 DevTools 或其他工具进行分析。
1. 引入 trace_events
模块
在使用 trace_events
模块之前,首先需要将其引入到你的项目中:
const trace = require('trace_events');
2. trace.createTracer()
方法
trace.createTracer()
方法用于创建一个新的 Trace
对象。此对象可以用于启用或禁用特定的追踪分类。
语法:
const tracer = trace.createTracer({ categories });
categories
: 追踪类别的字符串数组。例如,['node.perf', 'v8']
表示要追踪 Node.js 性能和 V8 引擎的事件。类别通过,
号分隔。
示例:
const tracer = trace.createTracer({ categories: ['node.perf', 'v8'] });
一旦 tracer
对象被创建,追踪的事件就会输出到进程的 trace
输出流。
3. tracer.enabled
属性
tracer.enabled
是一个布尔值,指示当前 tracer
对象是否启用了追踪。
console.log(tracer.enabled); // 输出 true 或 false
4. tracer.enable()
和 tracer.disable()
方法
通过调用 tracer.enable()
方法,可以启用追踪类别。同样,可以通过 tracer.disable()
来禁用追踪。
启用追踪:
tracer.enable();
禁用追踪:
tracer.disable();
5. trace.createTracing()
方法
trace.createTracing()
方法用于创建一个全局的追踪对象,该对象控制特定类别的追踪行为。
语法:
const tracing = trace.createTracing({ categories });
categories
: 字符串数组,用于定义追踪类别。
示例:
const tracing = trace.createTracing({ categories: ['node.async_hooks', 'v8'] });
6. tracing.enable()
和 tracing.disable()
和 tracer
类似,tracing
对象也有 enable()
和 disable()
方法,用于开启和关闭追踪:
启用追踪:
tracing.enable();
禁用追踪:
tracing.disable();
注意:调用 enable()
后,将开始记录指定类别的事件。disable()
将停止记录这些事件。
7. 追踪事件输出
当启用了追踪时,事件会被输出到 Node.js 的 process.stdout
。这些事件格式化为 Chrome Trace 事件格式,可以在 Chrome DevTools 的 "Performance" 标签中查看。
你可以通过将输出重定向到文件来保存这些事件,并稍后分析。例如:
node --trace-events-enabled app.js > trace.json
这将会启用事件追踪,并将输出保存到 trace.json
文件中。
8. 使用内置的事件类别
Node.js 中预定义了一些内置的事件类别,可以直接使用来追踪特定模块或功能。
常见的事件类别包括:
node.async_hooks
: 追踪与async_hooks
模块相关的异步事件。node.perf
: 追踪与 Node.js 性能相关的事件。v8
: 追踪 V8 引擎的性能事件。node.fs.sync
: 追踪同步文件系统操作。node.net
: 追踪网络相关的操作。
示例:追踪文件系统和网络相关的操作
const trace = require('trace_events');
const fsTracing = trace.createTracing({ categories: ['node.fs.sync'] });
const netTracing = trace.createTracing({ categories: ['node.net'] });
fsTracing.enable();
netTracing.enable();
// 文件系统操作
const fs = require('fs');
fs.writeFileSync('test.txt', 'Hello, World!');
// 网络操作
const net = require('net');
const server = net.createServer((socket) => {
socket.end('Hello, World!\n');
});
server.listen(8080);
// 禁用追踪
fsTracing.disable();
netTracing.disable();
此示例中,我们分别启用了对文件系统和网络操作的追踪,并在执行完操作后禁用了追踪。
9. 使用 Chrome DevTools 查看 Trace 数据
当你生成了 Trace 数据文件后,可以在 Chrome DevTools 中查看和分析:
- 打开 Chrome 浏览器。
- 打开 DevTools (
F12
或Ctrl+Shift+I
)。 - 进入 "Performance" 标签页。
- 点击 "Load Profile" 按钮,选择你生成的 Trace 文件(如
trace.json
)。
你将能够看到详细的性能数据,分析系统的各个部分(如 I/O 操作、异步任务等)的行为。
10. 使用 --trace-events-enabled
启动 Node.js 进程
除了在代码中手动控制追踪,你还可以在启动 Node.js 进程时通过命令行参数启用追踪。
启用所有追踪类别:
node --trace-events-enabled app.js
启用特定类别:
node --trace-events-enabled --trace-event-categories "node.net,node.fs.sync" app.js
--trace-events-enabled
: 启用事件追踪。--trace-event-categories
: 指定要追踪的类别。
你还可以将追踪输出写入特定文件:
node --trace-events-enabled --trace-event-file-pattern "./trace-%pid.json" app.js
11. 附加选项
--trace-event-file-pattern
: 指定追踪输出文件的命名模式。你可以使用%pid
替换为进程 ID。
例如:
node --trace-events-enabled --trace-event-file-pattern "trace-%pid.json" app.js
会为每个进程生成一个文件,文件名包含进程 ID。
总结
Node.js 的 trace_events
模块提供了一个强大的工具,用于追踪和分析系统的性能与行为。通过启用不同类别的事件追踪,开发者可以深入了解应用的执行过程,识别潜在的性能问题,并通过 Chrome DevTools 等工具对 Trace 数据进行可视化分析。