Node.js 中如何修改内存限制

运行 Node.js 应用程序时会有默认内存限制。 这意味着内存密集型应用程序可能会通过分配超过可用资源而耗尽内存。 这会导致类似于以下错误消息:

FATAL ERROR: invalid array length Allocation failed - JavaScript heap out of memory

如何测试内存限制

为了快速达到内存限制并重现错误,我们可以使用没有退出条件的 while 循环,如下所示:

const array = [];

while (true) {
    for (let i = 0; i < 100000; i++) {
        array.push(i);
    }

    console.log(process.memoryUsage());
}

在这个代码示例中,我们只是不断地将元素push到分配内存的数组中,但我们从未释放该内存,这会导致内存不足的错误。 在执行 Node.js 应用程序期间,我们可以使用 process.memoryUsage 方法来清楚地了解 Node.js 应用程序使用了多少内存。这个方法的输出形式如下

{
  rss: 19030016,     
  heapTotal: 4468736,
  heapUsed: 2579432, 
  external: 855863,  
  arrayBuffers: 9898
}

如何增加可用内存

幸运的是,要修复内存溢出的错误也是相当简单。 我们可以在运行 Node.js 应用程序时使用 --max-old-space-size 选项来增加可用堆内存大小:

$ node --max-old-space-size=1024 app.js # 增加到 1GB
$ node --max-old-space-size=2048 app.js # 增加到 2GB
$ node --max-old-space-size=3072 app.js # 增加到 3GB
$ node --max-old-space-size=4096 app.js # 增加到 4GB
$ node --max-old-space-size=5120 app.js # 增加到 5GB

当然,请记住,我们无法将内存限制增加到超过运行 Node.js 应用程序的机器的物理内存。 尽管如此,使用 --max-old-space-size 选项是修复 Node.js 内存错误的最便捷的方法。