Потоковая передача файла с URI напрямую на S3 с использованием лямбды с использованием смешного объема памяти

Мне удалось передать файлы напрямую с URI на S3, не загружая их на диск с помощью AWS Lambda (node.js), используя этот пример кода. Я немного изменил его, чтобы создать буфер из тела объекта запроса. Это мой код

Это работает чудо, за исключением очень важной вещи! Максимальный размер файлов составляет 350 МБ, но каждый раз, когда запускается лямбда-функция, она занимает до 1,5 ГБ памяти и даже больше! Максимально допустимый объем памяти для вызова функции составляет 1,536 ГБ. Обычно используемый объем составляет от 0,8 до 1,5 ГБ (это довольно случайно).

Я думаю, что где-то есть утечка памяти, но я не могу понять, где!

Есть идеи?

1 ответ

Решение

var buffer = new Buffer(body); кажется, что копия всего тела ответа в памяти... удваивает объем памяти, который вам понадобится.

Похоже, что запрос предоставлен (или может быть настроен для предоставления) body как Buffer так что вы должны быть в состоянии использовать body напрямую, а не дублировать его в памяти, создав второй буфер.

Другие вопросы по тегам