【问题标题】:Why is node require cache filling up and leaking为什么节点需要缓存填充和泄漏
【发布时间】:2016-08-06 07:52:42
【问题描述】:

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

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

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

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

【问题讨论】:

  • require 缓存只是一个以路径为键的对象。您确定从模块中导出的某些对象不会无限制地增长并显示为与需要缓存相关,因为您导出了它?
  • 我不确定。我最大的堆项目是“(字符串)”,它包含所有缓存的代码,并且似乎在增长而不是 GC。我会用屏幕截图更新我的帖子。如果是每次导出,除非导出发生变化,否则此缓存是否仍会保持?还是我误解了这个堆数据?

标签: node.js caching babeljs loopbackjs


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2013-10-12
    • 1970-01-01
    • 2013-09-05
    • 2015-05-29
    • 2015-10-18
    • 1970-01-01
    • 2013-03-14
    • 2021-07-15
    • 2023-03-27
    相关资源
    最近更新 更多