Я использую архиватор , чтобы заархивировать несколько файлов в aws лямбду. Я вижу, что когда на диске больше нет места для записи, архиватор все еще хранит (или пропускает) некоторые данные. Я пытался сделать «archive.close ()» или «archive.destroy ()», но я продолжаю получать archive.close / (archive.destroy) не является ошибкой функции. Интересно, сталкивался ли кто-нибудь с этим или решил это. Вот как выглядит мой код:
exports.makeZip = function(source, destination) {
return new Promise((resolve, reject) => {
console.info("started zipping from source: %s to destination: %s", source, destination);
let output, archive;
try {
output = fs.createWriteStream(destination);
archive = archiver('zip');
output.on('close', function () {
output.destroy();
//archive.close();
console.log("Completed Zipping!");
resolve();
});
output.on('error', function(err) {
output.destroy();
//archive.close();
console.error("something went wrong while zipping! ", err);
reject(new Error(err));
});
archive.on('error', function(err) {
//archive.close();
output.destroy();
console.error("something went wrong while zipping! ", err);
reject(new Error(err));
});
archive.pipe(output);
archive.directory(source, false);
archive.finalize();
} catch (error) {
if (typeof output !== 'undefined') {
output.destroy();
}
if (typeof archive !== 'undefined') {
archive.close();
}
console.error("Zipping failed. Reason: %s", error.message)
reject(new Error(error));
}
});
};
То, как я знаю, что это вызывает утечку памяти, потому что я распечатал дисковое пространство до и после удаления моих файлов в начале и в конце моего Лямбда-вызов. Я вижу, что есть место, которое не очищено.
Before cleanup
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/root 8191416 6107036 2067996 75% /
/dev/vdb 1490800 34896 1439520 3% /dev
/dev/vdd 538424 526588 0 100% /tmp
After cleanup
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/root 8191416 6107036 2067996 75% /
/dev/vdb 1490800 34896 1439520 3% /dev
/dev/vdd 538424 11068 515520 3% /tmp