Node.js内存分配失败

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

<--- 最近的几次GC --->
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 毫秒 [最后的备选gc]。 <--- JS堆栈跟踪 --->

这是关于什么的,如何解决?
提前感谢。

你尝试解密的数据有多大?你需要弄清楚在你的node.js应用程序中使用了太多内存的是什么,或者你需要增加可用于你的node.js应用程序的内存量。FYI堆快照将帮助你确定内存正在被什么消耗。 - jfriend00
5个回答

15

通过向node使用以下参数--max_old_space_size=x,为您的脚本分配更多的内存。

示例:

node --max_old_space_size=8000 yourscript.js

这将为您的脚本分配约8GB。最终,这仍然是不足够的,您应该将SQL文件解密成较小的块,并利用物理驱动器而不是RAM内存。

希望这有所帮助!


对于需要在容器中设置此项设置的任何人,您还可以将NODE_OPTIONS=--max_old_space_size=8000设置为环境变量。 - Peter Albert
我在GitLab runner构建中遇到了同样的问题,并设置了这个参数,但它没有起作用!- export NODE_OPTIONS="--max-old-space-size=8192" - npm install --legacy-peer-deps --no-shrinkwrap --update-binary - CI=false npm run-script build:prod - Mohammad Reza Mousavi
1
NODE_OPTIONS="--max-old-space-size=8192" 应该改为 NODE_OPTIONS="--max_old_space_size=8192"。在标志键中交换破折号和下划线。 - Blake Petersen

9

正确的解决方案

你的Node.js应用程序中有某个东西使用了太多的内存。这通常是一个不好的迹象,需要长期进行调查。为了找出确切的代码片段,可以使用node.js性能分析技术。关于此方面的一些文章,请参考:https://nodejs.org/en/docs/guides/simple-profiling/

快速解决方案

在某些情况下,我们需要快速的解决方案。像Cryptic Pug所指出的那样,我们可以增加JS内存分配限制来解决这些问题。根据您的需求,有几种选项可供选择。

  1. pass argument to node directly
    node --max_old_space_size=4096 app.js
    
  2. use environment variable
    NODE_OPTIONS=--max_old_space_size=4096
    node app.js
    
  3. use .npmrc file. Put following in .npmrc local or global file
    node-options=--max_old_space_size=4096
    
    and run your script
    node app.js
    

2

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

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

经过2个小时的研究和与同行的交流,我将我的node js版本从v14.15.4降级到v14.15.3。重启电脑,然后删除node_modules和yarn.lock文件,重新安装我的包,运行我的项目,错误消失了。 也许这会帮助一些遇到相同问题的人。


1

我最近遇到了类似的错误。在尝试了所有在线解决方案而没有成功的情况下,我终于找到了适合我的方法。我在我的计算机上安装了Node js LTS版本16.7。升级到当前版本的node js 18.0解决了这个问题。


更新Node.js对我也起作用了。 https://nodejs.org/en/download/current/ - Eketol

-2

我曾经遇到过这个问题,但是通过移除全局安装的Electron并在我的项目中本地安装Electron,这个错误就消失了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接