js утечка памяти внутри aws лямбда - PullRequest
0 голосов
/ 01 мая 2020

Я использую архиватор , чтобы заархивировать несколько файлов в 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
...