Node-RED学习笔记 —— http文件传输内存溢出JavaScript heap out of memory

问题描述

利用Node-red实现一个http监听服务,接收post方法发送过来的 multiparty file 文件。在postman通过http请求向nodered传输 .zip 文件时,由于传输的文件较大(大概130Mb),nodered程序直接崩了,开始重启,报错如下:


原因

一开始以为是Node-red默认的http请求最大内存为 5mb,传输的文件过大,导致的内存溢出。于是修改了 /node-red/node_modules/node-red 路径下的 setting.js 文件,apiMaxLength参数默认是 5mb,修改为 4gb,重启后发现问题依然存在。

于是观察了报错信息,理所当然的认为是v8引擎内存回收机制限制了内存大小,于是在启动nodered时通过传参修改了v8引擎内存最大内存上限,结果问题依然没有得到解决。

node --max-old-space-size=4700 red.js     //设置老生代内存空间最大值,单位为MB

最终,通过观察发现Node-red里是在把整个文件都放在内存里,而且想用一个buffer存下来:

而Buffer 的 length 属性被定义为一个32位无符号整型的值,因此当Buffer.length 属性为负数或者大于等于2^32时,会出现Invalid array length的错误。并且观察nodejs中Buffer类的属性,Buffer对象是直接向操作系统申请,不在V8引擎管理的heap里申请,因此不受调整v8引擎内存大小的影响。


解决办法

暂无

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值