FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory when processing large files with fs

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory when processing large files with fs

我有一个 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 放在文件的开头,但这并没有解决我的问题...

尝试 google 但几乎没有关于我的问题的相关信息..

我可以在不需要文件内容时刷新内存吗?我是否需要为 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);
            });
        });
    }
});

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

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

我毫无问题地处理了我的 1.3GB !!

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

Linux/macOS

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

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

Windows

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