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

wpr*_*ter 5 caching node.js loopbackjs babeljs

我对环回中的 API 进行了压力测试,该 API 使用 Babel 进行了转换。然而,在这些较长的“冒烟”测试中,我们看到堆分析中的 require 缓存增长得非常大(高达 1GB)并且没有得到 GCd。

我知道在删除最后一个引用之前,需要缓存不会 GC,但是如果我一遍又一遍地调用相同的方法集,为什么它会继续增长?

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

这是显示堆转储的屏幕截图

在此处输入图片说明

mwa*_*man 0

我们遇到了与堆填充和填充看起来像服务的旧源代码的字符串类似的问题。问题最终出在 Babel 缓存(~/.babel.json对于服务的用户)。每次重新启动应用程序时,该文件都会增长约 2MB,并最终在我们的内容开始损坏之前达到 +200MB。删除该文件并为服务设置以下环境变量解决了我们的问题:(BABEL_DISABLE_CACHE=1堆从 600MB 减少到 80MB)。