nodejs内存分配失败

时间:2017-10-11 13:02:26

标签: node.js garbage-collection

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

  

< ---最后几个GC --->
  31681 ms:标记扫描654.1(666.5) - > 492.5(509.8)MB,267.5 / 0.0 ms   [分配失败] [请求旧空间的GC]。
  31839ms:Mark-sweep 492.5(509.8) - > 492.2(506.8)MB,157.5 / 0.0 ms   [分配失败] [请求旧空间的GC]。
  31985 ms:Mark-sweep 492.2(506.8) - > 492.2(497.8)MB,146.2 / 0.0 ms   [不得已的gc]。 32122 ms:标记扫描   492.2(497.8) - > 492.2(497.8)MB,136.8 / 0.0 ms [最后的手段gc]。   < --- JS stacktrace --->

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

提前致谢

3 个答案:

答案 0 :(得分:8)

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

示例:

node --max_old_space_size=8000 yourscript.js

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

希望这有帮助!

答案 1 :(得分: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
    

答案 2 :(得分:0)

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