JavaScript heap out of memory

4,290 阅读2分钟

JavaScript heap out of memory 错误解决方案

官方给的解释如下:

What is the memory limit on a node process?
Currently, by default v8 has a memory limit of 512MB on 32-bit systems, and 1.4GB on 64-bit systems. The limit can be raised by setting --max_old_space_size to a maximum of ~1024 (~1 GB) (32-bit) and ~4096 (~4GB) (64-bit), but it is recommended that you split your single process into several workers if you are hitting memory limits.

默认nodejs 使用的V8引擎官方默认配置是在64位的系统重视1.4g的内存,也正好和上面的提示用量一样,并且内存大小最大为4g,官方还建议如果使用较大内存的话则需要分成多个子worker这样来规避大内存的使用。

所以解决方法有两个:

  • 在执行node命令的时候使用

    –max_old_space_size=4096 这个参数,设置最大4gb的内存

    例如以前的node index.js变成 node --max_old_space_size=4096 index.js

  • 直接安装 一个npm包 increase-memory-limit 包地址如下:

    https://www.npmjs.com/package/increase-memory-limit

    这个包会自动为命令增加 --max_old_space_size=4096 参数。

@vue/cli3.x 版本 JavaScript heap out of memory的处理

1.项目中使用上述操作拓展内存配置

2.修改全局安装的vue启动脚本 添加-max_old_space_size=4096参数

此处针对yarn全局安装的vuecli处理,在cmd控制台 执行如下命令:

notepad %USERPROFILE%/AppData/Local/Yarn/Data/global/node_modules/.bin/vue.cmd

编辑打开文件内容如下:

@IF EXIST "%~dp0\node.exe" (
  "%~dp0\node.exe --max_old_space_size=4096"  "%~dp0\..\@vue\cli\bin\vue.js" %*
) ELSE (
  @SETLOCAL
  @SET PATHEXT=%PATHEXT:;.JS;=;%
  node --max_old_space_size=4096  "%~dp0\..\@vue\cli\bin\vue.js" %*
)

其次针对项目中vue-cli-server处理,在脚本项目目录打开cmd控制台 执行如下命令:

notepad ./node_modules/.bin/vue-cli-server.cmd

编辑打开文件内容如下:

@IF EXIST "%~dp0\node.exe" (
  "%~dp0\node.exe" --max_old_space_size=4096 "%~dp0\..\@vue\cli-service\bin\vue-cli-service.js" %*
) ELSE (
  @SETLOCAL
  @SET PATHEXT=%PATHEXT:;.JS;=;%
  node --max_old_space_size=4096  "%~dp0\..\@vue\cli-service\bin\vue-cli-service.js" %*
)