【发布时间】:2021-03-15 22:39:00
【问题描述】:
我在 Elastic Beanstalk 上有一个 NodeJS 应用程序。
我正在下载大量大型 zip,打开并处理它们,然后通过 fs.unlinkSync 删除 zip 文件
测试时我看到文件被删除,但显然 unlink 在进程使用它时实际上不会释放空间?
如何指示 fs 释放内存分配?
我正在通过
写文件let writeStream = fs.createWriteStream(file.name);
writeStream.on('finish', () => {
// a bunch of logic that eventually returns a promise
在它的解析/拒绝中
fs.unlinkSync(file.name)
我已经完成了,这是我唯一一次触摸文件,其他所有内容都已关闭。我需要等待 writeStream 关闭的其他事件吗?
--全面解释工作流程
for (let i = 0; i < records.length; i++) {
await processZip(records[i]);
fs.unlinkSync(records[i].name);
}
processZip 方法内部
return new Promise(async (resolve, reject) => {
var readStream = this.s3Access.getObjectStream(guid);
let writeStream = fs.createWriteStream(file.name);
readStream.pipe(writeStream);
writeStream.on('finish', () => {
resolve();
}
}
【问题讨论】:
-
你需要让 gc 完成它的工作。使用
nextTick并确保释放包含内存的变量
标签: node.js