【发布时间】:2017-07-21 13:42:01
【问题描述】:
如何在 NodeJS Request Pipe 上设置最大缓冲区大小?我正在尝试使用AWS Lambda 从source 下载并通过管道上传到destination,如下面的代码所示:
request(source).pipe(request(destination))
此代码运行良好,但如果文件大小大于 AWS Lambda 内存大小(下图),它会崩溃。如果我增加内存,它会起作用,所以我知道不是超时或链接,而只是内存分配。最初我并没有增加数量,但即使我使用最大,仍然是 1.5GB,并且我希望传输比这更大的文件。
AWS Lambda 上是否有一个用于 NodeJS 的全局变量?还是有其他建议?
【问题讨论】:
-
阅读:nodejs.org/api/stream.html#stream_buffering 管道自动管理数据流以防止内存使用失控,所以我不确定你的代码是否显示是您的问题的实际原因。
-
如果 AWS Lambda 内存小于文件会失败,所以我知道是内存。 NodeJS 最多可以分配 2GB,对吧?但我想要更小的东西,也许是 128MB,就像 AWS Lambda 设置一样。这是完整的来源,但基本上是问题所在:github.com/augustogoncalves/…
-
您的测试用例中没有上传到 Box.com?这部分代码将整个源文件读入内存。
-
是的,BOX片是个例外,还是要修。但是第二部分使用了 PIPE,并且由于内存而失败了...
-
尝试添加错误处理程序,也许有导致问题的潜在错误。但我不明白为什么该代码会将整个源文件读入内存。就像我说的,
.pipe()应该防止这种情况发生(尽管 也许request本身就是造成它的原因)。
标签: node.js request aws-lambda