当前位置: 博客 /  JavaScript  / 解决JavaScript Heap Out of Memory问题

解决JavaScript Heap Out of Memory问题

一、问题

用node.js来start或者build,如果项目蛮大的,可能会遇到运行中断或不能build的情况,错误提示中有一句:

JavaScript heap out of memory

二、原因

JavaScript heap out of memory即JavaScript堆内存不足。
这里的JavaScript即指Node.js, Node.js 是一个基于 Chrome V8 引擎 的 JavaScript 运行时。默认只能使用部分内存:64位系统下约为1.4 GB,32位系统下约为0.7 GB。

三、解决办法

3.1 手动方法

  1. 如果是以 node index.js 方式启动,在启动时加上需要扩展的空间大小:
node --max-old-space-size=size(M) index.js

size的单位是M,扩展到几G就用1024M乘以几,例如扩展到4G,即1024*4=4096M,启动方法如下:

node --max-old-space-size=4096 index.js
  1. 如果是react项目中以 npm start 方式启动,在启动的配置文件中扩展空间:

在项目安装的依赖包文件夹 node_modules 中找到 .bin 文件夹,打开 react-scripts 文件, 在启动node的命令后面加上扩展命令,如 --max_old_space_size=4096,完整代码类似于:

#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")

case `uname` in
    *CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac

if [ -x "$basedir/node" ]; then
  "$basedir/node" --max_old_space_size=4096 "$basedir/../react-scripts/bin/react-scripts.js" "$@"
  ret=$?
else 
  node --max_old_space_size=4096 "$basedir/../react-scripts/bin/react-scripts.js" "$@"
  ret=$?
fi
exit $ret

但项目中可能涉及到多处使用node启动的命令,可以使用插件自动修复。

3.2 插件方法

推荐插件increase-memory-limit:

This tool will append –max-old-space-size=4096 in all node calls inside your node_modules/.bin/* files.

这个工具可以在你的所有node_modules/.bin/下的node命令增加–max-old-space-size=4096。

使用方法:

  1. 全局安装:npm install -g increase-memory-limit

  2. 在需要扩展的项目根目录下运行:increase-memory-limit

运行完毕则扩展完成。

另外它提供了可选的修复选项,在package.json加入配置,然后运行 npm run fix-memory-limit

配置举例:

// ...
  "scripts": {
    "fix-memory-limit": "cross-env LIMIT=2048 increase-memory-limit"
  },
  "devDependencies": {
    "increase-memory-limit": "^1.0.3",
    "cross-env": "^5.0.5"
  }
// ...

四、参考资料

GitHub地址:increase-memory-limit

- END -