Memory Leak内存泄漏
一句话:程序运行时间越长占用内存越高,最后变慢、崩溃或被服务器杀掉。
它是什么
内存泄漏是程序申请了内存但没有正确释放,导致内存持续增长。在前端、Node.js、Python服务、队列任务和长连接服务中都可能出现。
适合干什么
- 线上服务运行一段时间后变慢的人
- Node.js、Python或前端开发者
- 遇到容器OOM或服务器内存飙升的人
- 正在做后台任务和长连接的人
不适合干什么
- 一次性脚本执行完就退出的小任务
- 只是短时间内正常峰值内存升高
- 没有监控数据无法判断趋势的情况
普通人怎么用
- 观察内存是否持续上涨不回落
- 检查最近新增的缓存、定时器、监听器和全局变量
- 重启服务验证是否短暂恢复
- 用日志定位哪个接口或任务触发
- 减少不必要的对象持有
进阶用户怎么用
- 使用内存快照对比对象增长
- 检查事件监听器是否重复注册
- 限制缓存大小和过期时间
- 把大文件处理改成流式处理
- 为队列任务设置并发和超时
常见误区
- 把所有内存上涨都当成泄漏
- 只靠重启掩盖问题
- 无限制缓存数据
- 定时任务里不断创建连接但不关闭
和相似工具的区别
- 内存泄漏 vs 内存峰值:内存峰值可能会回落,内存泄漏通常会持续增长并不释放。
- 内存泄漏 vs OOM:内存泄漏是原因之一,OOM是内存耗尽后的结果。
入门步骤
- 确认内存增长曲线
- 找出触发场景
- 检查缓存、监听器、连接、定时器
- 做压力测试复现
- 上线修复并继续观察
推荐工具(第三方)
Chrome DevTools、Node.js Inspector、Sentry、Grafana、Datadog