使用内置工具初步检测内存泄漏问题
console.memory
:Node.js 环境中可以通过 console.memory
来获取当前进程的内存使用信息。在代码适当位置(比如关键逻辑前后)打印 console.memory
,可以看到 rss
(resident set size,进程占用物理内存大小)、heapTotal
(V8 堆内存的总大小)、heapUsed
(V8 堆内存中已使用的大小)等信息。例如:
console.log('Before some operations:', console.memory);
// 执行一些可能导致内存泄漏的操作
console.log('After some operations:', console.memory);
node --inspect
:
- 启动 Node.js 应用时带上
--inspect
参数,例如 node --inspect app.js
。
- 打开 Chrome 浏览器,访问
chrome://inspect
,点击 Open dedicated DevTools for Node
打开调试工具。
- 在调试工具的
Performance
面板中,录制一段时间的性能数据(点击录制按钮,然后执行应用中的相关操作,完成后停止录制)。
- 在性能分析结果中,查看
Memory
相关图表,观察堆内存使用量是否持续增长而没有下降趋势,这可能暗示内存泄漏。
检测过程中重点关注的指标
rss
(resident set size):反映进程实际占用物理内存的大小。如果在应用运行过程中,rss
持续增长且没有稳定或下降的趋势,很可能存在内存泄漏。
heapTotal
和 heapUsed
:
heapTotal
是 V8 堆内存的总大小,heapUsed
是已使用的堆内存大小。如果 heapUsed
不断增长接近 heapTotal
,并且 V8 频繁进行垃圾回收(可通过性能分析工具查看垃圾回收次数和耗时),同时应用性能开始下降,这也可能是内存泄漏的迹象。
- 对象数量:在性能分析工具中,可以查看不同类型对象的数量变化。如果某种类型的对象数量持续增加,且没有被合理释放,可能是该类型对象相关的代码存在内存泄漏。