Node.js 为什么节点需要缓存填充和泄漏

Node.js 为什么节点需要缓存填充和泄漏,node.js,caching,babeljs,loopbackjs,Node.js,Caching,Babeljs,Loopbackjs,Im在环回中对一个API进行压力测试,该API由Babel传输。然而,在这些较长的“冒烟”测试中,我们看到堆分析中的require缓存变得相当大(高达1gb),并且没有得到GCd 我知道在删除最后一个引用之前,require缓存不会进行GC,但是如果我一遍又一遍地调用同一组方法,它为什么会继续增长呢 这可能是Babel 6或NodeJS 4.4.3的问题吗 下面是显示堆转储的屏幕截图 我们遇到了一个类似的问题,堆填充和字符串填充看起来像服务的旧源代码。问题最终是Babel缓存(~/.Babel.

Im在环回中对一个API进行压力测试,该API由Babel传输。然而,在这些较长的“冒烟”测试中,我们看到堆分析中的require缓存变得相当大(高达1gb),并且没有得到GCd

我知道在删除最后一个引用之前,require缓存不会进行GC,但是如果我一遍又一遍地调用同一组方法,它为什么会继续增长呢

这可能是Babel 6或NodeJS 4.4.3的问题吗

下面是显示堆转储的屏幕截图


我们遇到了一个类似的问题,堆填充和字符串填充看起来像服务的旧源代码。问题最终是Babel缓存(
~/.Babel.json
用于服务用户)。每次重启应用程序,这个文件都会增加大约2MB,最终在我们的东西开始崩溃之前达到+200MB。删除该文件并为服务设置以下环境变量解决了我们的问题:
BABEL\u DISABLE\u CACHE=1
(堆从600MB下降到80MB)。

require CACHE只是一个由路径设置键的对象。你确定你从模块中导出的某个对象没有因为导出而绑定并显示为与require缓存相关吗?我不确定这一点。我认为最大的堆项是“(string)”,它包含所有缓存的代码,并且似乎在增长,而不是GC。我将用屏幕截图更新我的帖子。如果它是针对导出的,除非导出发生更改,否则此缓存是否仍会保持?还是我误解了这个堆数据?