@airbnb/node-memwatch

中文文档
3.0.0发布于 2024/11/08CommonJS近 30 天下载 2.4万

注意你的记忆用量,发现并隔离出漏.

中文使用文档
文档目录7 节
  1. 安装
  2. 说明
  3. 泄漏检测
  4. 高使用率
  5. 挤出水面
  6. 未来工作
  7. 许可证

node-memwatch: 为节点进行漏出检测和堆积潜水

node-memwatch 是来帮助你发现内存泄露的 节点JS代码. 它规定:

  • A 类 stats 全部 MarkSweepCompact GCs 上发布的事件 数据描述您的堆积用量和长期趋势.

  • A 类 HeapDiff 类,让你比较你的堆积状态 两分时间,告诉你分配了什么,什么 已经释放.

安装

  • npm install @airbnb/node-memwatch

说明

调试和剖析内存的工具越来越多 节点JS应用程序中的用法,但仍需要 平台独立本地模块,不需要特殊 仪器 本单元试图满足这一需要.

要开始, 导入 node-memwatch 像这样:

var memwatch = require('@airbnb/node-memwatch');

泄漏检测

目前我们探索休克时不支持

高使用率

评估你的记忆足迹的最好方法是看一看堆积 v8完成垃圾收集后立即使用. memwatch 已经 正是这样 - 它检查堆积的使用 只有在GC给你一个稳定 您实际内存使用情况的基线 .

当V8进行垃圾收集时(从技术上讲,我们是在谈论 以密布的光圈盟誓, memwatch 将发出一个 stats 活动.

memwatch.on('stats', function(stats) { ... });

这个 stats 数据会看起来像这样:

{
  gcScavengeCount: 1,
  gcScavengeTime: 1100880, // ns
  gcMarkSweepCompactCount: 2,
  gcMarkSweepCompactTime: 21157231, // ns
  gcIncrementalMarkingCount: 0,
  gcIncrementalMarkingTime: 0, //ns
  gcProcessWeakCallbacksCount: 0,
  gcProcessWeakCallbacksTime: 0, // ns
  total_heap_size: 16097280, // bytes
  total_heap_size_executable: 3670016, // bytes
  total_physical_size: 10741880, // bytes
  total_available_size: 1487689928, // bytes
  used_heap_size: 5691584, // bytes
  heap_size_limit: 1501560832, // bytes
  malloced_memory: 8192,
  peak_malloced_memory: 1185464,
  gc_time: 4587251 // ns
}

V8有它自己的想法 什么时候才是最好的 GC,和在 重载,它可能会推迟一段时间。 帮助 更快的调试, memwatch 页:1 gc() 将 V8 强制至 做一个完整的GC和堆积的收缩.

挤出水面

对于泄漏隔离,它提供了一个 HeapDiff 需要两个快照和 计算它们之间的分数。 例如:

// Take first snapshot
var hd = new memwatch.HeapDiff();

// do some things ...

// Take the second snapshot and compute the diff
var diff = hd.end();

内容 diff 看起来像:

{
  "before": { "nodes": 11625, "size_bytes": 1869904, "size": "1.78 mb" },
  "after":  { "nodes": 21435, "size_bytes": 2119136, "size": "2.02 mb" },
  "change": { "size_bytes": 249232, "size": "243.39 kb", "freed_nodes": 197,
    "allocated_nodes": 10007,
    "details": [
      { "what": "String",
        "size_bytes": -2120,  "size": "-2.07 kb",  "+": 3,    "-": 62
      },
      { "what": "Array",
        "size_bytes": 66687,  "size": "65.13 kb",  "+": 4,    "-": 78
      },
      { "what": "LeakingClass",
        "size_bytes": 239952, "size": "234.33 kb", "+": 9998, "-": 0
      }
    ]
  }
}

Diff显示在抽样期间 拨款 String 财务报告和审定财务报表 Array 班级减少,但 Leaking Class 增加了9998笔拨款。 对.

你用得着 HeapDiff 在你身边 on('stats') 召回; 即使这样 抓取一个记忆快照,它触发一个 V8 GC,它不会触发 页:1 stats 事件本身。 因为这太傻了.

未来工作

请参见“问题”,以分享建议并作出贡献!

许可证

http://wtfpl.net (英语)

版本与发布记录

@airbnb/node-memwatch 共发布 6 个版本,首次发布于 2018/03/21;过去 12 个月发布了 0 个版本。

版本发布日期距今
3.0.0latest2024/11/082 年前
2.0.02020/04/236 年前
1.0.22018/05/238 年前
1.0.2-alpha.02018/05/228 年前
1.0.12018/05/158 年前
1.0.02018/03/218 年前

关于 @airbnb/node-memwatch 的常见问题

@airbnb/node-memwatch 是什么?

注意你的记忆用量,发现并隔离出漏.

如何安装 @airbnb/node-memwatch?

在项目目录运行 npm install @airbnb/node-memwatch,或使用 pnpm add / yarn add / bun add。

@airbnb/node-memwatch 支持 TypeScript 吗?

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

@airbnb/node-memwatch 支持 ESM 还是 CommonJS?

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

@airbnb/node-memwatch 需要什么版本的 Node.js?

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

@airbnb/node-memwatch 可以商用吗?

@airbnb/node-memwatch 使用 未声明 许可。package.json 没有声明许可证。没有许可证的代码默认保留全部权利,商用前请联系作者或查看仓库中的 LICENSE 文件。以上为概括,不构成法律意见,请以许可原文为准。

@airbnb/node-memwatch 的下载量有多少?

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

@airbnb/node-memwatch 还在维护吗?

最新版本 3.0.0 发布于 2024/11/08(2 年前);至今共发布 6 个版本,其中过去 12 个月发布了 0 个;首次发布于 2018/03/21。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。