如何增加Node.js的运行时内存限制

2021-09-20大约8分钟

Node.js的代码在运行的时候,默认情况下最大能用的内存空间大概是1.4GB左右。也就是说,哪怕你的机器有更多的内容,比如说32GB,那么Node.js也只会用到1.4GB。从实际的情况来看,即使用到了1.4GB,那么NodeJS的进程也不一定会崩溃,可能到接2GB的时候才会崩溃,但是从内存占用超过1.4GB之后,进程的响应时间就开始增大了,结果也可能会出错FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory

因此,当观察到Node.js的进程占用内存超过1.4GB的时候,就要考虑一下:

  1. 程序占用这么大的内存空间,是否合理?
  2. 是否要增大Node.js的内存限制?如何增大?

Node.js程序是否能占用大的内容空间?

从理论上来说,Node.js的程序可以占用更大的内存空间。不过,从实际角度出发,还要看一下我们Node.js使用的场景。如果我们的Node.js程序提供的是对反应时间比较敏感的服务,那么最好要避免占用大内存。因为Node.js是的进程是单线程的,如果占用内存很大,那么自动内存垃圾回收器会花更多的时间来检查并回收内存,这个操作会block目前正在运行的程序,导致程序出现卡顿,影响系统的响应时间。

一般情况下,如果是Node.js实现的一个网站,只是从数据库里取数据,然后生成网页展示给用户,那么通常情况下占用几百兆的内存空间是足够了的。

如果我们的Node.js进程占用的内存不合理,那么可以考虑:

  1. 减少或避免在内存中缓存数据,比如可以把缓存数据存入Redis等单独的缓存服务器里。
  2. 优化占内存多的代码,考虑放到客户端,其他编程语言实现的API端,甚至云平台的函数计算里。
  3. 排除内存泄露的问题。

如何增大Node.js的内存限制?

在启动Node.js进程的时候,我们可以给V8引擎增加一个参数--max-old-space-size。这个参数后面的值就是内存的大小,单位是MB。

比如,我们把内存限制增加到8GB:

node --max-old-space-size=8192 server.js  
请记住,要把想加的参数加到运行的文件名前面才能让参数生效。