После обрывов скачивания у сервиса кончаются файловые дескрипторы
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
- Добавить обработчик ошибок только на поток чтения
