问题描述
该程序是一个标准的烧瓶程序,它会在初始化过程中进行一些清理工作。在使用 os.remove("abc.txt")
的 cleanup() 过程中,我注意到该文件已被删除,但并未被操作系统回收。
我同时使用“python website.py”和“gunicorn website:app”来运行该应用程序,并且在 Linux 环境中都存在相同的问题。在 MacOS 中,我无法重现它。
文件是 os.remove 后,它不再列在“ls”命令中,而是当我运行时
lsof | grep deleted
我仍然可以看到这个文件被列为已删除但被 python 应用程序打开。
因为这个文件已经是“os.remove”,所以没有列在ls
命令中,du
不会计算这个文件。
但是如果这个文件足够大,df
命令会显示这个文件的空间还在被占用,没有被回收。因为这个文件仍然“被烧瓶应用程序打开”,正如 lsof
程序声称的那样。
一旦我停止运行 Flask 应用程序,lsof
将没有此文件,并且空间将被回收。
通常当文件太小,或者应用程序频繁停止或重新启动时,您不会注意到空间被占用。但这对于保持空间来说并不是很合理。我希望该网站可以运行多年。
在 Internet 上搜索“打开但已删除的文件”时,大多数建议是“找到该应用程序并杀死它”。有没有办法让 Flask 应用程序保持运行而不重新启动它?我的应用程序实际上并没有“打开”这个文件,只是简单地 os.remove 它。
关于如何删除文件并立即收回空间的建议?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)