nodejs内存分配失败

Pvv*_*sad 7 garbage-collection node.js

我正在使用解密来解密"MySql"数据.我得到了以下问题:

<---最后几个GC --->
31681 ms:标记扫描654.1(666.5) - > 492.5(509.8)MB,267.5/0.0 ms [分配失败] [请求旧空间中的GC].
31839 ms:标记扫描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 [last resort gc].32122 ms:标记扫描492.2(497.8) - > 492.2(497.8)MB,136.8/0.0 ms [最后的手段gc].<--- JS stacktrace --->

有什么关系以及如何解决它,

提前致谢

Iho*_*hor 9

正确的解决方案

您的 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
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用环境变量
    NODE_OPTIONS=--max_old_space_size=4096
    node app.js
    
    Run Code Online (Sandbox Code Playgroud)
  3. 使用.npmrc文件。将以下内容放入.npmrc本地或全局文件 中
    node-options=--max_old_space_size=4096
    
    Run Code Online (Sandbox Code Playgroud) 并运行你的脚本
    node-options=--max_old_space_size=4096
    
    Run Code Online (Sandbox Code Playgroud)


Cry*_*Pug 8

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

例:

node --max_old_space_size=8000 yourscript.js
Run Code Online (Sandbox Code Playgroud)

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

希望这可以帮助!