Вступить в клуб →
средняявопросПотоки, память и производительность процесса

После обрывов скачивания у сервиса кончаются файловые дескрипторы

app.get('/reports/:id/download', (req, res) => {
  fs.createReadStream(reportPath(req.params.id))
    .pipe(zlib.createGzip())
    .pipe(res);
});

Пользователи часто закрывают вкладку, не дождавшись конца скачивания. Через несколько дней сервис падает с EMFILE: too many open files. Как исправить?

  • Соединять потоки через stream.pipeline
  • Увеличить лимит открытых файлов в операционной системе
  • Читать файл целиком в память и отдавать через res.send
  • Добавить обработчик ошибок только на поток чтения

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела