linux 删除日志之后没有释放空间

有一台服务器,最近经常报磁盘空间不足。每次nagios报警,登上去一看是postgresql的log和一部分业务程序产生的log占据了巨量的空间。

磁盘空间不足,那就删除一些没有用的log吧。

于是执行

rm -f xxx.log

执行完了之后,看了一下磁盘空间,基本没有变化。

但是这些文件我真的已经删掉了呀!

无奈地重启了几个进程。发现空间有释放。

我怀疑是这些日志虽然被删除,但是仍然有进程在使用它,导致其所占空间无法释放。换一个说法,就是文件句柄没有释放。

当我将对应的进程重启之后,这几个文件不再被使用,于是空间得以释放。

当又一次遇到这种问题时,我执行了

lsof |grep deleted

果然,我发现几个已经被删除的文件,还在被一些进程使用着。

确定其中一个进程已经无用之后,我kill掉了它。看到对应的空间释放出来了。

不过,很多时候,这些进程是不能重启,或者说很不适合重启的。

既然不能重启,也就意味着文件句柄不会释放,唯一的办法就是定时清空,而不是删除文件。

> xxx.log

或者

echo “” > xxx.log

都可以。

打赏

点赞