我正在对使用 Babel 转译的环回 API 进行压力测试。然而,在这些较长的“冒烟”测试中,我们看到堆分析中的 require 缓存变得非常大(高达 1gb)并且没有得到 GCd。
我知道在删除最后一个引用之前 require 缓存不会 GC,但是如果我一遍又一遍地调用同一组方法,为什么它会继续增长?
这可能是 Babel 6 或 NodeJS 4.4.3 的问题吗?
这是显示堆转储的屏幕截图
最佳答案
我们遇到了一个似乎与堆填充和填充字符串类似的问题,这些字符串看起来像服务的旧源代码。问题最终出在 Babel 缓存(服务用户的 ~/.babel.json
)。每次重新启动应用程序时,该文件都会增长约 2MB,并最终在我们的东西开始崩溃之前达到 +200MB。删除文件并为服务设置以下环境变量解决了我们的问题:BABEL_DISABLE_CACHE=1
(堆从 600MB 下降到 80MB)。
关于node.js - 为什么 Node 需要缓存填满和泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36628540/