【发布时间】:2018-01-30 19:22:56
【问题描述】:
我正在使用以下调用来删除我在 Linux (RHEL) 上运行的 nodeJS 应用程序中的现有文件。
fs.unlink(downloadsFolder + '/' + file)
但是,几天后我注意到文件仍在系统中,因为文件句柄没有释放。我重新启动了节点服务器,这些文件最终消失了。如何以编程方式解决此问题?
dzdo lsof -L | grep -i deleted
node 48782 root 600743243 403197165 /mnt/downloads/file_1516312894734.csv (deleted)
node 48782 root 14999 403197166 /mnt/downloads/file_1516729327306.csv (deleted)
我在fs.unlink() 的日志中也收到了这个警告,这会导致它吗?
(node:48782) [DEP0013] DeprecationWarning: Calling an asynchronous function without callback is deprecated.
【问题讨论】:
-
您有没有找到解决文件被标记为已删除但仍占用空间的解决方案?下面的答案没有回答你的问题。
-
@ChadJohnson 不,仍在等待它,同时我每隔几天就会重新启动一次节点服务器以释放这些文件句柄。
-
您是否尝试过截断这些文件?如果是,是否还需要重新启动服务器,如果是,为什么?打开文件句柄的允许数量是否有限制?
-
@ChadJohnson 如何截断文件?
-
使用
fs.truncate()。我是这样做的:fs.truncate(sourceFilePath, () => fs.unlink(sourceFilePath, () => {}));所以,我在删除文件之前截断了它。这绝对是节省了一天。应该减轻您重新启动服务器的需要:)