Node.js NodeJS fs.unlinkSync未释放aws ec2服务器上的硬盘空间
我在Elastic Beanstalk上有一个NodeJS应用程序 我正在下载大量大拉链,打开并处理它们,然后通过fs.unlinkSync删除zip文件 在测试时,我看到文件被删除了,但显然取消链接不会在进程使用空间时释放空间 如何指示fs释放内存分配 我正在写文件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
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);
}
}