【问题标题】:nodejs memory allocation failurenodejs内存分配失败
【发布时间】:2018-03-23 04:04:50
【问题描述】:

我正在使用解密来解密“MySql”数据。我遇到了以下问题:


31681 毫秒:标记扫描 654.1 (666.5) -> 492.5 (509.8) MB,267.5 / 0.0 毫秒 [分配失败] [请求旧空间中的 GC]。
31839 毫秒:标记扫描 492.5 (509.8) -> 492.2 (506.8) MB,157.5 / 0.0 毫秒 [分配失败] [请求旧空间中的 GC]。
31985 毫秒:标记扫描 492.2 (506.8) -> 492.2 (497.8) MB,146.2 / 0.0 毫秒 [最后的gc]。 32122 毫秒:标记扫描 492.2 (497.8) -> 492.2 (497.8) MB,136.8 / 0.0 ms [最后的 gc]。

它是关于什么以及如何解决它,

提前致谢

【问题讨论】:

  • 您尝试解密的数据有多大?您需要弄清楚 node.js 应用程序中使用过多内存的原因和/或,您需要增加 node.js 应用程序可用的内存量。仅供参考,堆快照将帮助您了解您的内存正在被什么消耗。

标签: node.js garbage-collection


【解决方案1】:

通过使用以下节点参数为脚本分配更多内存:--max_old_space_size=x

例子:

node --max_old_space_size=8000 yourscript.js

这将为您的脚本分配大约 8GB 的​​空间。最终这仍然不够,您应该以更小的块解密您的 SQL,并使用您的物理驱动器而不是 RAM 内存。

希望这会有所帮助!

【讨论】:

  • 对于在容器中需要此设置的任何人,您还可以将NODE_OPTIONS=--max_old_space_size=8000设置为环境变量
【解决方案2】:

适当的解决方案

在您的 node.js 应用程序中使用了过多的内存。这通常是不好的迹象,需要长期调查。要找出执行此操作的确切代码 - 您可能需要查看 node.js 分析技术。关于此的一些文章https://nodejs.org/en/docs/guides/simple-profiling/

快速解决方案

在某些情况下,我们想要快速的解决方法。对于这种情况,正如 Cryptic Pug 正确指出的那样 - 我们可以增加 JS 内存分配限制。这样做的选择很少(根据您的需要)

  1. 直接将参数传递给node
    node --max_old_space_size=4096 app.js
    
  2. 使用环境变量
    NODE_OPTIONS=--max_old_space_size=4096
    node app.js
    
  3. 使用.npmrc 文件。将以下内容放入 .npmrc 本地或全局文件中
    node-options=--max_old_space_size=4096
    
    并运行你的脚本
    node app.js
    

【讨论】:

    【解决方案3】:

    我也遇到了同样的问题。当我运行项目时,它是 React js 项目,我得到了同样的错误。

    <--- Last few GCs --->
    ...
    JavaScript heap out of memory
    

    等 经过 2 小时的研究并与同行联系后,我将我的 node js 版本从 v14.15.4 降级到 v14.15.3。重启我的电脑,然后删除我的 node_modules 和 yarn.lock 文件,重新安装我的包,运行我的项目,错误就消失了。 也许它会帮助其他面临同样问题的人。

    【讨论】:

      【解决方案4】:

      我遇到了这个问题,但是通过删除全局安装的电子并为我的项目在本地安装电子,这个错误消失了。

      【讨论】:

        猜你喜欢
        • 2012-12-07
        • 1970-01-01
        • 2018-09-29
        • 2016-05-01
        • 2013-02-19
        • 2011-12-12
        • 2011-08-23
        • 1970-01-01
        相关资源
        最近更新 更多