NodeJS模块已缓存,为何多次require同一模块内存仍增长?
Node.js 动态重复 require 的内存与性能问题
问题背景
我在排查一款Node.js应用的内存问题,应用存在动态require的场景:
function executeSomeCode(module) { const m = require(module).run; run(); }
同一模块可能被多次传入executeSomeCode函数,也就是被重复require,我想明确这种情况是否会影响内存占用与性能。
测试过程
为验证问题,我编写了如下测试代码:
function executeFoo() { const foo = require('./foo').foo; foo(); } function main(){ executeFoo(); const first = process.memoryUsage(); for (var i = 0; i < 10000; i++) { executeFoo(); } console.log(first); console.log(process.memoryUsage()); } main();
其中./foo模块仅包含一个简单的日志函数。
测试结果
某次运行的内存数据输出如下:
{ rss: 26824704, heapTotal: 5005312, heapUsed: 3157040, external: 1083723, arrayBuffers: 9898 } { rss: 39321600, heapTotal: 8466432, heapUsed: 4497528, external: 1083763, arrayBuffers: 9898 }
可见rss数值有明显增长,但我对Node.js了解有限,不确定这是否属于异常问题,还是Node.js会自行处理。另外我知道Node.js会缓存已require的模块,那为什么内存仍会出现增长?
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

