本文介绍: 通过一个 RangeError: Array buffer allocation failed 的错误,认识到了内存合理使用的重要性。解决了这个问题,我们的大文件分片上传功能运行更加稳定。如果你有更高明的方法,欢迎到评论区讨论。文章首发于IICOOM-个人博客 《RangeError: Array buffer allocation failed》…
代码分析
const buffer = Buffer.concat(bufferList, len);
定位到是上边这行出现了问题,检查了一下服务器,node应用的内存占用是 192.1mb。
这时原因就很明了,是因为文件分片太大导致内存耗尽,没有可用空间了。
优化方法
上面的做法是把所有的文件分片都concat然后写到流中,正是在这个过程中导致了内存耗尽。
其实,我们可以按顺序分多次concat写入,修改代码如下:
这是重新调用接口就不会出现标题的错误了,文件可以合并成功。但是查看一下Node进程的内存占用 却仍然保持在192.1mb左右。
直接把读取到的文件写入ws,因为文件大小已经被分片为1M大小,每次读取完写入到ws后就会被Node.js 的GC回收,理论上是比较安全的操作。
总结
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。