Запрос NodeJS https требует чрезмерной памяти - PullRequest
0 голосов
/ 02 января 2019

Я пытаюсь загрузить JSON этого URL https://pricing.us -east-1.amazonaws.com / offer / v1.0 / aws / AmazonEC2 / current / index.json . Файл имеет более 600 МБ для загрузки.

Я использую этот код в лямбда-функции:

Функция лямбда настроена с таймаутом 10 минут и 3008 МБ памяти. Но функция пытается использовать больше, чем это.

let res = await doRequest2('https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/AmazonEC2/current/index.json');

function doRequest2(url) {
  console.log("doRequest");
 return new Promise(function (resolve, reject) {
 const https = require("https");
 const url = "https://pricing.us-east-   1.amazonaws.com/offers/v1.0/aws/AmazonEC2/current/index.json";
 https.get(url, res => {
 res.setEncoding("utf8");
 let body = "";
 res.on("data", data => {
  body += data;
  });
  res.on("end", () => {
   body = JSON.parse(body);
 resolve(body);
 console.log(body);
   });
    res.on("error", () => {
 console.log("Error");
 reject("error");
     });
 });

});
}

Как загрузка json может потребовать столько памяти?

1 Ответ

0 голосов
/ 02 января 2019

Память используется не только для хранения копии файла json. Он запускает вашу реальную программу, поддерживает https-ссылку и все, что делают компьютеры.

Загрузка на самом деле довольно тяжелая. Из-за размера файла использование памяти может быть немного spikey.

Мне действительно удалось заставить ваш код работать, но только один из четырех раз, потому что, как только будет увеличено использование памяти, лямбда будет отключена.

Эта работа, кажется, немного велика для того, с чем может справиться лямбда (по крайней мере, надежно).

NB - я удалил предыдущий ответ, указывающий на ограничение дискового пространства, доступного во временной папке, так как после моего собственного тестирования я увидел, что это не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...