用途
本技能为 JavaScript 和 Node.js 应用程序中的内存泄漏问题提供专家级诊断和修复工作流。当用户报告高内存使用、OOM(内存耗尽)错误,或希望捕获、比较、分析堆快照时,可使用此技能。它依托 Chrome DevTools MCP 工具,帮助定位泄漏源并指导修复。
主要能力
- 捕获堆快照:通过 Chrome DevTools MCP 工具与前端应用交互,在基线、目标操作后、恢复操作后等状态生成
.heapsnapshot文件。 - 比较快照:使用
get_heapsnapshot_summary确认快照加载并对比总体情况,使用compare_heapsnapshots比较基线与目标快照;先看摘要差异,再针对可疑增长指定classIndex获取详细类差异。 - 检查保留链与支配者链:当某类或对象类型意外增长时,使用
get_heapsnapshot_class_nodes列出实例,使用get_heapsnapshot_retainers、get_heapsnapshot_retaining_paths、get_heapsnapshot_dominators、get_heapsnapshot_edges理解节点为何仍可达,使用get_heapsnapshot_object_details获取对象元数据(大小、类型、距离、DOM 分离状态),使用get_heapsnapshot_duplicate_strings处理字符串增长主导的情况。 - 高级分析与分类过滤:使用
get_heapsnapshot_details或get_heapsnapshot_class_nodes配合filterName直接定位常见泄漏类别:objectsRetainedByDetachedDomNodes(分离的 DOM 节点保留的对象)、objectsRetainedByEventHandlers(未移除事件监听器保活的对象)、objectsRetainedByContexts(闭包或执行上下文困住的对象)、objectsRetainedByConsole(控制台日志保留的对象)。
使用方式
- 确认前置条件:高级内存调试工具(如
compare_heapsnapshots、get_heapsnapshot_details等)仅在服务器以--memoryDebugging标志启动时可用。首先检查这些工具是否可用;若不可用,尝试读取 MCP 配置文件确认是否启用了--memoryDebugging。 - 捕获快照:对于前端 Web 应用,使用
chrome-devtools-mcp工具(指定pageId)执行click、navigate_page、fill等操作,将页面置于目标状态,然后恢复原始状态观察内存是否释放。重复相同用户交互 10 次以放大泄漏。使用take_heapsnapshot(带pageId)保存基线、目标、最终状态的快照文件。 - 比较快照:先用
get_heapsnapshot_summary检查每个快照加载并对比高层总量。用compare_heapsnapshots比较基线与目标快照,先看摘要差异,再针对可疑增长指定classIndex获取详细类差异。在深入特定节点 ID 前,先使用摘要输出。 - 检查保留链与支配者链:在修改代码前,使用 MCP 工具检查保留链和支配者。用
get_heapsnapshot_class_nodes列出可疑类实例;用get_heapsnapshot_retainers、get_heapsnapshot_retaining_paths、get_heapsnapshot_dominators、get_heapsnapshot_edges理解代表性节点为何仍可达;用get_heapsnapshot_object_details获取指定nodeId的详细元数据;当字符串增长主导差异时,使用get_heapsnapshot_duplicate_strings。当保留路径指向应用代码后,参考references/common-leaks.md中的常见内存泄漏示例及修复方法。 - 高级分类过滤:利用内置 MCP 内存工具和过滤器直接定位特定泄漏类别,无需外部工具。
核心原则
- 优先使用 MCP 内存工具:不要尝试直接读取原始
.heapsnapshot文件,它们极大且会消耗过多令牌。应使用 Chrome DevTools MCP 堆快照工具进行汇总、比较和检查。 - 隔离泄漏:确定泄漏发生在浏览器(客户端)还是 Node.js(服务端)。
- 常见罪魁祸首:关注分离的 DOM 节点、未处理的闭包、全局变量、未移除的事件监听器、无界增长的缓存。注意:分离的 DOM 节点有时是有意缓存;在将其置空之前务必询问用户。
- 关闭已加载的快照:堆快照可能很大。调查完成后,对每个已加载快照使用
close_heapsnapshot以释放 MCP 服务器占用的内存。
适用场景
- 前端 Web 应用出现内存持续增长或未释放。
- Node.js 服务端应用报告高内存占用或 OOM 错误。
- 需要捕获、比较堆快照以定位泄漏对象。
- 需要分析保留链、支配者链或分类过滤特定泄漏原因。
限制
- 高级内存调试工具仅在服务器以
--memoryDebugging标志启动时可用;否则无法使用比较、详情等功能。 - 直接读取
.heapsnapshot文件因体积过大不可行,必须依赖 MCP 工具。 - 分离的 DOM 节点可能是故意缓存,处理前需用户确认。
- 调查结束后需手动关闭已加载快照以释放内存。
- 文档未提供关于价格、平台支持范围、效果保证等信息,暂未提供。