开发与工程 ✓ Microsoft · 官方 heap-snapshot-analysisv8memory-leaksretainer-pathsgarbage-collectionnode.jstypescript

V8 堆快照分析

从 V8 堆快照定位内存泄漏与对象保留链。

FollowSkills 评估 · FSRS-2.0
不推荐
40/ 100 五分制 2.0 / 5
信任安全14 / 25 · 2.8/5

技能主要读取用户指定的堆快照,并将调查脚本写入 gitignored scratchpad,未见凭据窃取、外传或破坏性默认行为;但未要求用户确认路径或说明堆快照可能包含源码、提示词和敏感数据,也未明确权限边界、清理/回滚和依赖完整性,因此扣分。

可靠稳定4 / 20 · 1.0/5

工作流结构清晰,提供大文件流式替代方案和弱引用处理;但静态检查发现 parseSnapshot.ts 从文件末尾约100字节反向寻找 strings 数组键,通常无法定位大型 strings 区段,且 scratchpad 示例的 ../helpers 相对路径可能错误。缺少针对关键路径的技能专用测试和明确异常诊断,因此仅给低分。

适用触发8 / 15 · 2.7/5

目标用户、输入类型和主要场景说明较清楚,也声明了超过2 GiB快照的限制;但未定义标准输出格式、更多非适用边界、触发排除条件或中文使用支持。核心功能不依赖海外服务,因此未因网络可达性额外扣分。

规范维护8 / 15 · 2.7/5

文档按解析、比较、保留路径和脚本编写分层,包含示例、限制、概念说明和 MIT 版权头;但没有技能版本、变更记录、独立安装/依赖说明、FAQ、维护责任或更新路径,且示例导入路径存在疑点,因此扣分。

有效结果4 / 15 · 1.3/5

比较、构图和保留路径分析的目标具有直接实用价值,且针对超大快照给出流式策略;但核心解析器疑似无法可靠处理 strings 区段,输出主要是 console 日志而非稳定的可消费结果,缺少静态可验证的代表性结果,因此仅部分认可。

证据核验2 / 10 · 1.0/5

源文件、版权信息和仓库 CI 可审计,但提供的 CI 工作流覆盖聊天性能/泄漏检查,并非该技能 helpers 的测试;没有技能专用测试、样例快照或第三方执行证据,结论主要来自静态代码检查,因此低分。

证据充分度: 评估于 2026年7月20日 审查版本 5b3e1be7be9e
使用前请注意
  • parseSnapshot.ts 的 strings 区段定位逻辑可能在常规或大型快照上失败,建议修复并加入样例快照测试。
  • scratchpad 中从子目录导入 helpers 的相对路径可能应为 ../../helpers。
  • 堆快照可能包含源码、提示词、对象内容和其他敏感数据;使用前应明确授权、存储位置、保留期限和脱敏要求。
  • 文档应补充稳定输出格式、失败处理、版本/变更记录、依赖安装和维护更新路径。
查看完整评分方法 →

它能做什么 & 适用场景

这是一个用于分析 V8 `.heapsnapshot` 文件的 Agent Skill,适合调查内存泄漏、对象数量或大小变化,以及对象为何在垃圾回收后仍然存活。它提供快照解析、前后快照比较和保留路径追踪辅助工具,并支持为具体调查编写 scratchpad 脚本。该 Skill 从已经存在的快照开始,不负责启动 VS Code 或捕获快照。对于超过约 2 GiB 的快照,需要改用流式分析脚本,而不是重复读取整个文件。

读取 V8 .heapsnapshot 文件;使用 parseSnapshot.ts 解析快照并用 buildGraph 构建对象图;使用 compareSnapshots.ts 比较 before/after 快照,生成按大小、数量、新对象组和摘要组织的结果;使用 findRetainers.ts 跳过弱引用边并追踪对象的保留路径;在 .github/skills/heap-snapshot-analysis/scratchpad/ 下编写调查脚本和 findings.md;对超大文件使用 streamSnapshot.mjs 的流式原语扫描节点、边和必要的字符串。

  1. 开发者已经从 DevTools 或其他流程获得 before/after 快照,需要比较对象数量和大小变化。
  2. 排查某类对象在垃圾回收后仍存活,并需要找到实际的保留路径。
  3. 分析 VS Code 内存问题时,检查 RowCache、资源池、Observable、HoverService 或序列化状态等可能的保留模式。
  4. 面对超过约 2 GiB 的快照,需要只流式读取相关区段,避免一次性加载整个文件。
  5. 需要为一次性的内存调查编写可复用的分析脚本,并记录已验证、排除和延期的假设。

优缺点一览

优点
  • 覆盖解析、前后快照比较和保留路径追踪三个核心环节。
  • 明确要求跳过 weak 边,降低把 WeakMap 等非强引用误判为泄漏的风险。
  • 针对超过约 2 GiB 的文件提供流式分析策略,包含区段定位、元数据解析和分块读取建议。
  • 提供 VS Code 常见保留模式和防御性清理注意事项,可帮助调查应用内存问题。
  • 允许在 gitignored 的 dated scratchpad 子目录中保存脚本、缓存结果和调查结论。
局限
  • 只分析已经存在的快照,不负责捕获快照或复现用户操作场景。
  • 普通辅助工具可能因约 2 GiB 的 Buffer 限制而无法加载超大快照,需要额外编写流式脚本。
  • 流式分析需要自行决定要扫描的区段和字段,且字段级归属可能低估监听器、观察者和反向引用。
  • 分析通常需要较多内存;源材料给出的示例使用 `--max-old-space-size=16384` 或更高配置。
  • 源材料没有提供独立安装流程、平台矩阵或测试套件信息。

如何安装

该 Skill 位于 microsoft/vscode 仓库的 .github/skills/heap-snapshot-analysis/SKILL.md。源材料没有提供独立安装命令或单独打包说明;应将包含该路径的技能目录放入所用 Agent Skills 客户端可发现的位置。其所在仓库采用 MIT 许可证。

如何使用

先准备已有的 .heapsnapshot 文件,并向 Agent 提出例如“比较 /path/to/before.heapsnapshot/path/to/after.heapsnapshot,找出新增对象组和主要保留路径”。在脚本中可导入:import { parseSnapshot, buildGraph } from '../helpers/parseSnapshot.ts';import { compareSnapshots } from '../helpers/compareSnapshots.ts';import { findRetainerPaths } from '../helpers/findRetainers.ts';。运行 scratchpad 脚本时,源材料给出的形式是:cd .github/skills/heap-snapshot-analysis,然后使用 node --max-old-space-size=16384 scratchpad/analyze.mjs;超大文件则使用 streamSnapshot.mjs 编写流式分析脚本。若还需要启动 VS Code、驱动场景并捕获快照,应先使用 VS Code performance workflow skill。

对比同类

与 VS Code performance workflow skill 相比,本 Skill 位于后续的低层分析阶段:performance workflow 用于启动 VS Code、驱动场景并捕获快照;本 Skill 使用已存在的快照进行解析、比较和保留路径调查。两者是互补关系,而不是同一用途的替代品。

常见问题

它能自动生成堆快照吗?
不能。它从已经存在的 `.heapsnapshot` 文件开始;如果需要启动 VS Code、执行场景并捕获快照,应先使用 VS Code performance workflow skill。
超过 2 GiB 的快照还能分析吗?
可以尝试流式分析。源材料建议使用 `streamSnapshot.mjs`,先定位 `nodes`、`edges`、`strings` 等区段,并按块解析所需数字数组;不要只是提高 `--max-old-space-size` 后重复读取完整文件。
它会把弱引用当作泄漏证据吗?
保留路径追踪时应跳过 `weak` 边,因为 WeakRef 或 WeakMap 键不会阻止垃圾回收。WeakMap backing arrays 出现在路径中时也可能只是误导性线索。
使用它需要联网或 MCP 服务吗?
源材料没有显示网络调用或 MCP 依赖。实际分析需要本地文件系统中的快照、技能辅助文件和 Node.js 运行环境。

同仓库的其他 Skills

均来自 microsoft/vscode

开发与工程 ✓ Microsoft · 官方

工具重命名兼容性检查

防止内置工具重命名破坏现有提示词与工具配置。

开发与工程 ✓ Microsoft · 官方

Copilot Chat OpenTelemetry 埋点指南

为 Copilot Chat 统一设计和维护 OpenTelemetry 埋点。

开发与工程 ✓ Microsoft · 官方

VS Code 配置策略维护助手

规范 VS Code 企业配置策略的注册、导出与验证。

设计与前端 ✓ Microsoft · 官方

VS Code 设计哲学

用价值、原则和设计动作,把“看起来不对”转化为可执行的界面改进。

开发与工程 ✓ Microsoft · 官方

Agent 主机端到端测试助手

用严格的回放夹具维护 VS Code Agent 主机端到端测试。

开发与工程 ✓ Microsoft · 官方

VS Code 集成浏览器架构指南

帮助开发者安全理解和修改 VS Code 集成浏览器的跨进程架构。

开发与工程 ✓ Microsoft · 官方

VS Code Agents 窗口会话架构

帮助代理安全实现和修复 VS Code Agents 窗口功能。

开发与工程 ✓ Microsoft · 官方

智能提交助手

根据仓库惯例生成提交信息并安全提交代码变更。

开发与工程 ✓ Microsoft · 官方

Agent Host 日志分析

定位 Agent Host 导出日志中的会话、传输与主机问题。

开发与工程 ✓ Microsoft · 官方

VS Code 单元测试助手

在 VS Code 源码仓库中按文件、测试名称或匹配模式运行单元测试。

开发与工程 ✓ Microsoft · 官方

VS Code Agent 定制助手

帮助创建、修复和排查 VS Code Agent 定制文件及其加载问题。

开发与工程 ✓ Microsoft · 官方

Code OSS 启动与调试

为 VS Code 源码构建提供隔离启动、Playwright 自动化和多进程调试端口。

开发与工程 ✓ Microsoft · 官方

VS Code 无障碍开发助手

为 VS Code 交互式功能提供可执行的无障碍实现规范。

设计与前端 ✓ Microsoft · 官方

VS Code CSS 布局规范

用 VS Code 规范构建稳健的 CSS 布局与文本截断体验

开发与工程 ✓ Microsoft · 官方

VS Code Chat 性能实验室

基准测试聊天渲染性能,并检测会话中的内存泄漏。

开发与工程 ✓ Microsoft · 官方

组件夹具与截图测试

帮助你为 VS Code 组件创建稳定、可主题化的截图测试夹具。

开发与工程 ✓ Microsoft · 官方

VS Code 冒烟测试助手

运行、筛选并调试 VS Code 端到端冒烟测试。

开发与工程 ✓ Microsoft · 官方

VS Code 崩溃转储符号化

将原生 VS Code 崩溃转储转换为带方法名的可读回溯。

开发与工程 ✓ Microsoft · 官方

VS Code 本地 Web 工作台

在本地 vscode.dev 中验证 VS Code 工作台和 Agents 窗口改动。

开发与工程 ✓ Microsoft · 官方

反馈执行器

读取当前会话反馈并落实对应代码修改。

相关 Skills