0x

中文文档
6.0.0发布于 2025/07/07MITCommonJS近 30 天下载 30.2万

单指令的火焰图剖析

中文使用文档
文档目录33 节
  1. 可视化堆栈跟踪
  2. 支助
  3. 安装
  4. 使用量
  5. 正在生成
  6. 乌干达
  7. 生产服务器
  8. 配置文件夹
  9. 示例
  10. 命令行 API
  11. 帮助 qq-h
  12. 打开..
  13. -在港口上 - -P
  14. 名称
  15. 标题
  16. -- 输出- dir QQ- D
  17. --output-html QQ-F 数据输入
  18. --内核追踪
  19. - 安静..
  20. 安静 安静
  21. 仅收集
  22. -- 收起- 延迟
  23. -- 只可视化
  24. ——可视化-可视化
  25. --内核跟踪调试
  26. -- 树木调试
  27. 程序化 API
  28. 解决问题
  29. 记忆问题
  30. 调试
  31. 替代品
  32. 鸣谢
  33. 许可证

0个

0x

单指令的火焰图剖析

发现密码中的瓶颈和热路,用火焰图.

可视化堆栈跟踪

0x 可配置和生成一个具有单一命令的节点进程的交互式火焰图, 在任何节点运行的平台上(macOs, Linux, Windows, Android...).

支助

  • 节点v20.x及以上
  • 默认使用支持节点运行的任何操作系统 !
  • 颜色
    • 其他浏览器可能打开已退化但功能形式的火焰图

安装

npm install -g 0x

使用量

使用 0x 运行脚本 :

0x my-app.js

立即打开浏览器中的火焰图 :

0x -o my-app.js

自动针对第一个配置命令执行 通过配置进程打开的端口 :

0x -P 'autocannon localhost:$PORT' my-app.js

使用自定义节点可执行文件 :

0x -- /path/to/node my-app.js

将自定义参数传递到节点 :

0x -- node --zero-fill-buffers my-app.js

用于 pwsh 用户, 初切换到 CMD 或用 npx

npx 0x -o my-app.js

正在生成

准备生成火焰图时,发送SIGINT或SIGTERM.

最简单的方法是按下 CTRL+C.

何时 0x 它处理堆栈和 生成配置文件夹( e)<pid>.0x),包含 flamegraph.html。 。 。 .

乌干达

这个 flamegraph.html 文件包含 0x 用户界面,其解释如下: 文献/文献。 。 。 .

生产服务器

轻量级、生产服务器友好型、生成 火焰图描述于 文件/生产服务器。 。 。 .

配置文件夹

默认情况下,将创建一个配置文件夹,并以 PID 命名,例如. 3866.0x (我们可以使用 --output-dir 旗帜).

Profile 文件夹将在 文件/档案文件夹

示例

切开这个回放,运行 npm i -g 从还原根运行

0x examples/rest-api

在另一个标签运行中

npm run stress-rest-example

在服务器上加载,一旦完成 使用 ctrl + c 来杀死服务器.

命令行 API

帮助 qq-h

打印使用信息.

打开..

在浏览器中打开火焰图 open 或者说 xdg-open (见 https://www.npmjs.com/package/open (中文(简体) ) 详细情况请查阅.

-在港口上 - -P

运行给定的命令并生成火焰图 . 指定的命令可访问 a $PORT 变量. 这个 $PORT 变量是按照第一个端口设置的 配置进程打开 .

例如,这里有一个使用 自定义 以加载测试进程 :

0x -P 'autocannon localhost:$PORT' app.js

当负载测试完成后,处理的配置文件将 发送了 SIGINT , 火焰图将自动生成 .

记住要用单引号来避免被戳入, 或者其他的逃生变量(例如:. 0x -P "autocannon localhost:$PORT" app.js 没用的 0x -P "autocannon localhost:\$PORT" app.js 页:1.

注意: 在 Windows 插值上通常发生 %PORT%不过 在这种情况下,美元前缀 $PORT 是正确的语法 (因为内插不是基于外壳).

默认 : ''

名称

HTML 文件的名称, 没有. html 扩展名 能够设置为 - 将 HTML 写入 STDOUT( 注) 由于CLI 参数解析的性质,必须使用 =, (中文(简体) ), 譬如说. --name=-) (中文(简体) ).

如果这面旗帜或者 --output-html-file 设置为 - 然后 HTML 将转到 STDOUT.

默认: 火焰图

标题

设置要显示在 Flashgraph UI 中的标题 .

默认: 0x 运行启动进程的命令

-- 输出- dir QQ- D

指定文物输出目录。 可在模板中指定 可能变量的窗体 {pid}, (中文(简体) ), {timestamp}, (中文(简体) ), {name} (基于 --name 旗帜)和 {outputDir}(可变数) 必须在没有空白的情况下指定,例如. { pid } 不被支持.

默认 : {pid}.0x

--output-html QQ-F 数据输入

指定生成的 Flashgraph HTML 文件的去向. 可用可能变量的模板形式指定 状态 {pid}, (中文(简体) ), {timestamp}, (中文(简体) ), {name} (基于 --name 旗帜)和 {outputDir} (可变性必须指定,不设空格, 譬如说. { pid } 不被支持。 也可以设定为 - 改为 将 HTML 输出发送到 STDOUT (注) 由于CLI 参数解析的性质,必须使用 =, (中文(简体) ), 譬如说. --output-html=-) (中文(简体) ).

如果这面旗帜或者 --name 设置为 - 然后 HTML 将转到 STDOUT.

默认 : {outputDir}/{name}.html

--内核追踪

使用OS内核跟踪工具(perf on Linux). 这个能捕捉到 本地堆栈框架(C++模块和Libuv I/O), 但是由于编译器优化,可能导致从Node.js中缺少堆栈.

见 文件/内核追踪 更多信息.

默认: 假

- 安静..

限制输出, 唯一的输出将是致命错误或 路径 flamegraph.html 以成功的一代盟誓.

默认: 假

安静 安静

除致命错误外, 禁止所有输出 .

默认: 假

仅收集

不要生成火焰图, 只创建配置文件夹, 包括相关产出.

默认: 假

-- 收起- 延迟

相对于第一个条目,将堆栈的收集延迟到指定的时间(ms) .

默认: 0

-- 只可视化

提供用于构建或重建可视化的配置文件夹路径 从原始堆栈.

默认: 未定义

——可视化-可视化

提供 CPU 配置文件的路径(.cpuprofile) (中文(简体) ). 见 examples/cpu-profile 用于实例.

CPU 配置文件 输出没有那么多信息,但可以从浏览器中的Chrome Devtools中导出. 也有一个自动化的无头工具来做到这一点: 自动染色图示。关于在节点创建节点.js Cpu 配置文件,参见 v8 显示器 或者说 v8 显示器 - next。它们也可以使用命令行旗从12号及以上节点生成 --cpu-prof。 。 。 .

默认: 未定义

--内核跟踪调试

显示 perf(1) 工具的输出 .

默认: 假

-- 树木调试

将捕获到的微量输出的中间树代表保存到 JSON 文档.

默认: 假

程序化 API

0x也可以作为节点模块要求并被脚本:

const zeroEks = require('0x')
const path = require('path')

async function capture () {
  const opts = {
    argv: [path.join(__dirname, 'my-app.js'), '--my-flag', '"value for my flag"'],
    workingDir: __dirname
  }
  try {
    const file = await zeroEks(opts)
    console.log(`flamegraph in ${file}`)
  } catch (e) {
    console.error(e)
  }
}

capture()

程序化的API详见: 文件/附录。 。 。 .

解决问题

记忆问题

有很多堆叠的非常复杂的应用可能会触及内存问题.

这个 --stack-size 旗帜可以用来设置内存到最大 8GB 为了在剖析时围绕这一点开展工作:

node --stack-size=8024 $(which 0x) my-app.js

在克罗姆还是有问题打开火焰图 同样的工作 从命令行( 平台依赖) 打开 Chrome 即可使用 并筑巢 --stack-size 旗帜 --js-flags 旗帜 : --js-flags="--stack-size 8024"。 。 。 .

调试

DEBUG=0x* 0x my-app.js

替代品

鸣谢

本作最初的赞助商是: 临近格式

此工具来自各种信息和代码来源 并且会花费更长的时间 没有以下的人和 其开放源码/信息分享工作:

许可证

麻省理工学院

版本与发布记录

0x 共发布 125 个版本,首次发布于 2016/02/15;过去 12 个月发布了 0 个版本。

版本发布日期距今
6.0.0latest2025/07/071.3 年前
5.8.02024/11/192 年前
5.7.02023/09/043 年前
5.6.02023/07/283 年前
5.5.02023/03/063 年前
5.4.12022/08/164 年前

其他发布通道:rc1 → 4.0.0-rc1,rc2 → 4.0.0-rc2,rc3 → 4.0.0-rc3,rc4 → 4.0.0-rc4,rc5 → 4.0.0-rc5,v3-latest → 3.3.1。

关于 0x 的常见问题

0x 是什么?

单指令的火焰图剖析

如何安装 0x?

在项目目录运行 npm install 0x,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 0x,可以用 npx 0x 直接运行。

0x 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/0x 是否存在。

0x 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

0x 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=8.5.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

0x 可以商用吗?

0x 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

0x 的下载量有多少?

根据 npm 官方下载统计,0x 在 2026/10/04 – 2026/11/02 这 30 天内被下载 301,783 次,日均约 10,059 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

0x 还在维护吗?

最新版本 6.0.0 发布于 2025/07/07(1.3 年前);至今共发布 125 个版本,其中过去 12 个月发布了 0 个;首次发布于 2016/02/15。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。