SuperAPI AI 工具集

heap-snapshot-analysis

通用与其它

查看项目

更新于 10-16 00:32

技能介绍

用途:从已有的 V8 堆快照(.heapsnapshot)出发,调查内存泄漏与对象滞留问题。适用于用户提供快照、DevTools 导出或其它流程产生的快照,需要对比前后快照、分析对象为何在 GC 后仍存活等场景。若需先启动 VS Code、驱动场景并采集快照,应先使用 VS Code 性能工作流技能。

主要能力:使用 parseSnapshot.ts 加载快照并构建图;compareSnapshots.ts 对比两份快照,输出 topBySize、topByCount、newObjectGroups、summary;findRetainers.ts 追踪对象存活原因(可跳过 weak 边,支持 maxPaths、maxDepth、maxAttempts 参数)。资料还列出 VS Code 常见滞留模式(RowCache 模板、资源池 clear 顺序、autorunIterableDelta lastValues、HoverService._delayedHovers、ObjectMutationLog._previous、_previousModelRef 等)及防御性置空做法。

使用方式:在 scratchpad 中编写分析脚本,按 YYYY-MM-DD-短描述/ 组织,脚本可导入 ../helpers/*.ts。示例命令:node --max-old-space-size=16384 scratchpad/analyze.mjs;大文件示例:node --max-old-space-size=24576 scratchpad/YYYY-MM-DD-topic/findOffsets.mjs /path/to/Heap.heapsnapshot。

限制:快照常大于 500MB,不能用 JSON.parse;Node Buffer 上限约 2GiB,超过会报 ERR_FS_FILE_TOO_LARGE,应改用流式脚本(streamSnapshot.mjs)。追踪保留路径时须跳过 weak 边。注意 DevTools 调试器全局句柄等假保留者。每次调查应重新开始,不要参考 /memories/ 或 scratchpad 中的历史结论(除非用户明确要求)。典型分析每份快照约 30-120 秒。