Node 并不像其他后端语言一样,对内存的使用没有,在 Node 中使用内存,只能使用系统中的一部分内存, 位系统下约为 1.4GB,32 位系统下约为 0.7GB,这归咎于 Node 使用了 V8 引擎,这是 V8 引擎默认的堆大小。
Node 本身有内存,而每次内存下降到一定程度时就会主动释放,下降幅度约为 1.4GB。
可以通过参数来设置默认的堆。
- node --max-new-space-size=1024,app.js,单位为 KB
- node --max-old-space-size=2048,app.js,单位为 MB
直接在 package.json 启动脚本中修改相关参数,设置无效。因为内存在启动的时候就已经固定了,后期不够用不会自动扩容,在程序运行中可以通过 V8 这个模块来进行查看内存设置。
eggjs 框架的问题:使用了 egg-script 进行启动,传递 node 命令参数需要另外的写法,直接写是不生效的,在参数前加 --node-options 即可。
- 解决办法:修改 max-old-space-size 参数来修改堆栈大小
- node 写法:node --max-old-space-size=2048,app.js
- eggjs写法:egg-script start --node-options–max-old-space-size=2048,单位为 MB