致命错误:接近堆限制的无效标记压缩分配失败 - 使用 fs 处理大文件时 JavaScript 堆内存不足

Posted

技术标签:

【中文标题】致命错误:接近堆限制的无效标记压缩分配失败 - 使用 fs 处理大文件时 JavaScript 堆内存不足【英文标题】:FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory when processing large files with fs 【发布时间】:2019-06-05 19:45:49 【问题描述】:

我有一个 nodeJs 脚本来处理一堆大的 .csv 文件(总共 1.3GB)。它运行了一会儿并抛出此错误:

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - javascript heap out of memory

我尝试将#!/usr/bin/env node --max-old-space-size=4096 放在文件开头,但这并没有解决我的问题...

试图用谷歌搜索,但几乎没有关于我的问题的相关信息..

我可以在不需要文件内容时刷新内存吗?我需要为 nodeJs 分配更多内存吗?

谢谢 ;)

这是我的代码示例:

fs.readdir(dirName, function(err, filenames) 
    if (err) console.error(err);
    else 
        filenames.forEach(function(filename) 
            fs.readFile(dirName + filename, 'utf-8', function(err, content) 
                if (err) console.error(err);
                else processFile(content);
            );
        );
    
);

【问题讨论】:

【参考方案1】:

我终于找到了解决问题的方法!我需要启动将--max-old-space-size=8192 参数添加到节点进程的进程,如下所示:

node --max-old-space-size=8192 ./myScript.js

我处理了我的 1.3GB 没有问题!!

【讨论】:

【参考方案2】:

您可以通过在运行 Snyk 之前运行以下命令来增加分配给该命令的内存量:

Linux/macOS

导出 NODE_OPTIONS=--max-old-space-size=8192 例如:

导出 NODE_OPTIONS=--max-old-space-size=8192 snyk测试 导出 NODE_OPTIONS=--max-old-space-size=8192 snyk监视器

Windows

从控制面板转到系统 -> 高级系统设置 -> 环境变量 -> 新建(用户或系统)

【讨论】:

嗨,您能解释一下snyk monitor 的用途吗?

以上是关于致命错误:接近堆限制的无效标记压缩分配失败 - 使用 fs 处理大文件时 JavaScript 堆内存不足的主要内容,如果未能解决你的问题,请参考以下文章

致命错误:接近堆限制的无效标记压缩分配失败 - JavaScript 堆内存不足 Angular 13 应用程序

致命错误:接近堆限制的无效标记压缩分配失败 - 使用 fs 处理大文件时 JavaScript 堆内存不足

致命错误:堆限制附近的无效标记压缩分配失败 - JavaScript 堆内存不足 |反应

如何修复“致命错误:堆限制附近的无效标记压缩分配失败 - JavaScript 堆内存不足”错误

Nuxt 生成致命错误:在堆限制附近的无效标记压缩分配失败 - JavaScript 堆内存不足

错误:接近堆限制的无效标记压缩分配失败 - JavaScript 堆内存不足