Node.js NodeJS fs.unlinkSync未释放aws ec2服务器上的硬盘空间

Node.js NodeJS fs.unlinkSync未释放aws ec2服务器上的硬盘空间,node.js,Node.js,我在Elastic Beanstalk上有一个NodeJS应用程序 我正在下载大量大拉链,打开并处理它们,然后通过fs.unlinkSync删除zip文件 在测试时,我看到文件被删除了,但显然取消链接不会在进程使用空间时释放空间 如何指示fs释放内存分配 我正在写文件 let writeStream = fs.createWriteStream(file.name); writeStream.on('finish', () => { // a bunch of logic that e

我在Elastic Beanstalk上有一个NodeJS应用程序

我正在下载大量大拉链,打开并处理它们,然后通过fs.unlinkSync删除zip文件

在测试时,我看到文件被删除了,但显然取消链接不会在进程使用空间时释放空间

如何指示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);
}
根据unlinkSync调用C/C++API调用unlink

这是医生说的

取消链接将从文件系统中删除一个名称。如果这个名字是 文件的最后一个链接,如果没有进程打开该文件,则该文件为 删除并使其使用的空间可供重用

如果名称是指向文件的最后一个链接,但任何进程仍有 文件打开后,该文件将一直存在,直到最后一个文件 引用它的描述符已关闭

如果名称引用了符号链接,则该链接将被删除

如果名称指的是套接字、FIFO或设备,则其名称为 已删除,但打开对象的进程可以继续使用 它

基本上,所有链接都应该关闭,以便删除文件

尝试想想其他进程可能会使用您试图删除使用fs.open/openSync打开但未关闭的文件等的文件

更新

processZip返回的承诺成功解析后,文件似乎被删除

如果承诺被拒绝,即异步函数中抛出错误,则删除该文件也很有用

for (let i = 0; i < records.length; i++) {
  try {
    await processZip(records[i]);
  } finally {
    // delete file after success or error
    fs.unlinkSync(records[i].name);
  }
}
根据unlinkSync调用C/C++API调用unlink

这是医生说的

取消链接将从文件系统中删除一个名称。如果这个名字是 文件的最后一个链接,如果没有进程打开该文件,则该文件为 删除并使其使用的空间可供重用

如果名称是指向文件的最后一个链接,但任何进程仍有 文件打开后,该文件将一直存在,直到最后一个文件 引用它的描述符已关闭

如果名称引用了符号链接,则该链接将被删除

如果名称指的是套接字、FIFO或设备,则其名称为 已删除,但打开对象的进程可以继续使用 它

基本上,所有链接都应该关闭,以便删除文件

尝试想想其他进程可能会使用您试图删除使用fs.open/openSync打开但未关闭的文件等的文件

更新

processZip返回的承诺成功解析后,文件似乎被删除

如果承诺被拒绝,即异步函数中抛出错误,则删除该文件也很有用

for (let i = 0; i < records.length; i++) {
  try {
    await processZip(records[i]);
  } finally {
    // delete file after success or error
    fs.unlinkSync(records[i].name);
  }
}

你需要让gc完成它的工作。使用并确保释放包含内存的变量,您需要让gc完成它的工作。使用并确保释放包含memoryHi Vitalii的变量谢谢你的建议,我检查并确保没有其他链接或引用该文件,并将我的问题更新为showHi Joshua,我在文档中找到了关于错误处理的额外信息,并在我的回复中为您的代码添加了错误处理建议。您好Vitalii感谢您的建议,我已通过并确保没有其他链接或引用该文件,并将我的问题更新为showHi Joshua,我在文档中找到了关于错误处理的额外信息,并在我的回复中为您的代码添加了错误处理建议。
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();
  }

  readStream.on('error', err => {
    readStream.end();
    writeStream.end();
    reject(err);
  }

  writeStream.on('error', err => {
    readStream.end();
    writeStream.end();
    reject(err);
  }
}