SuperAPI AI 工具集

staff-engineering-skills-memory-leaks

通用与其它

查看项目

更新于 10-16 08:11

技能介绍

用途:这是一份面向使用垃圾回收语言(Node.js、Go)的工程师的技能文档,帮助在编写会随时间累积状态的代码前,识别并避免内存泄漏。核心提问是:什么会移除这些条目,什么限制它的大小。

主要能力:解释 GC 语言中泄漏的本质是持有不再需要的引用(Map、闭包、监听器、goroutine 会永久钉住内存),并强调时间维度——每请求 200 字节的泄漏在 100 次测试中不可见,在 1000 req/s 下每天可达 17GB。列出五种泄漏模式:无界累加器、事件监听器泄漏、闭包捕获、定时器泄漏、Go goroutine 泄漏,并给出各自的识别方法。

使用方式:文档给出可直接参考的修复模式,包括用 lru-cache 的 LRUCache 设置 max 与 ttl 构建有界缓存;用 AbortController 的 signal 在 abort() 时移除监听器;在创建闭包前提取所需值,避免捕获大数据集;用 WeakMap 为生命周期不受控的对象附加元数据;用 clearInterval 在资源关闭与 SIGTERM 时清理定时器;Go 中用 context 取消或关闭 channel 为 goroutine 提供退出路径;把循环中的 defer 提取到独立函数。

适用场景:编写内存缓存、事件监听、定时任务、长生命周期回调、Go 并发代码时;排查容器按固定周期重启(如 512MB pod 每小时泄漏 20MB 约 24 小时 OOM 一次)等疑似泄漏现象。

限制:文档为技能说明,未提供具体安装命令、版本要求或性能基准;示例代码需按实际项目调整。相关主题包括缓存失效、背压与惊群效应。