live-server 使用遇到的内存不足退出问题解决

最近linux服务器生成了很多html文件,这些文件彼此之间还有跳转关系,这里需要远程可以通过浏览器访问这些文件,nginx方案由于这些文件处于变化中,同时有依赖关系,就放弃这种方案了;转战前端node.js 提供的服务器live-server,用它作为前端开发服务器使用,完美解决,但是在使用过程中,由于产生的html文件量越来越多,同时在实时的变化,这里live-server在监控变化时,会需要大量内存空间,导致内存溢出,进程推出了,failed - JavaScript heap out of memory

1)这个问题是指JavaScript堆内存不足,这里说的 JavaScript 其实就是 Node,我们都知道 Node 是基于V8引擎,在一般的后端开发语言中,在基本的内存使用上没有什么限制,但是我去查阅了相关的资料才发现,在 Node 中通过 JavaScript 使用内存时只能使用部分内存(64位系统下约为1.4 GB,32位系统下约为0.7 GB)

2)V8提供了选项让我们使用更多的内存。Node 在启动时可以传递 --max-old-space-size--max-new-space-size 来调整内存大小的使用限制,示例如下

node --max-old-space-size=1700 test.js // 单位为MB
// 或者
node --max-new-space-size=1024 test.js // 单位为KB

所以这里我们需要找到live-server服务启动的地方,将这个 --max-old-space-size 参数修改下就可以了。

解决方案1:

步骤:

1、找到安装live-server的目录

由于npm安装和live-server安装一样,所以可以通过找npm的安装目录找。

使用:npm config ls 找到:

可以看到,这个目录下是npm包的地方 ,我们可以再node_modules下找到。如下图:

 2、进入live-server,修改live-serve.js

live-server文件夹下游几个js文件,具体修改哪个,通过查看package.js得到真正执行的脚本:

所以修改 live-serve.js就可以了。

vi live-server.js可以看到#!/usr/bin/env node一行这样的代码,它的意思就是,用当前电脑/usr/bin/env目录下的node来运行该文件里面的javascript代码,看到这里我们都明白了,回到我们最初要解决的问题,我们可以把--max_old_space_size=4096这行代码写在#!/usr/bin/env node后面,#!/usr/bin/env node --max_old_space_size=4096,这样就好了,我们的内存溢出问题也就解决了

3、启动live-server服务

修改前:通过ps -ef|grep node 查到你启动的服务,类似如下图:

可以看到,这里node在启动服务时,默认的原有的内存大小。

修改后:

通过对比,这里可以看到,node内存大小修改已经生效,问题也就解决了。

同时,针对其他node内存不足的问题,解决方案也可以参考:https://segmentfault.com/a/1190000010437948

解决方案2:

如果第一种方案使用有问题,可以使用这种方案,直接找到live-server.js文件,在:

#!/usr/bin/env node 和内容之间加下面这段代码,这里设置的是4g的内存,大家可以灵活修改。

#!/usr/bin/env node


const v8 = require('v8')

const cluster = require('cluster')


process.env.NODE_OPTIONS = process.env.NODE_OPTIONS || ''

if (!process.env.NODE_OPTIONS.includes('--max-old-space-size=')) {

  process.env.NODE_OPTIONS = (process.env.NODE_OPTIONS || '') + ` --max-old-space-size=4096`

}


if (cluster.isMaster) {

  process.env.NODE_OPTIONS = process.env.NODE_OPTIONS || ''

  if (!process.env.NODE_OPTIONS.includes('--max-old-space-size=')) {

    process.env.NODE_OPTIONS = (process.env.NODE_OPTIONS || '') + ` --max-old-space-size=4096`

  }

  cluster.fork()

} else {

  console.log(Math.round(v8.getHeapStatistics().total_available_size / 1024 / 1024) + ' MB')

  process.exit(0)

}


启动服务,可以看到这里打印出了目前node使用的内存大小,4g的样子

相关使用说明参考:动态修改Node.js中的内存限制

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值