linux 删除日志之后没有释放空间
有一台服务器,最近经常报磁盘空间不足。每次nagios报警,登上去一看是postgresql的log和一部分业务程序产生的log占据了巨量的空间。
磁盘空间不足,那就删除一些没有用的log吧。
于是执行
rm -f xxx.log
执行完了之后,看了一下磁盘空间,基本没有变化。
但是这些文件我真的已经删掉了呀!
无奈地重启了几个进程。发现空间有释放。
我怀疑是这些日志虽然被删除,但是仍然有进程在使用它,导致其所占空间无法释放。换一个说法,就是文件句柄没有释放。
当我将对应的进程重启之后,这几个文件不再被使用,于是空间得以释放。
当又一次遇到这种问题时,我执行了
lsof |grep deleted
果然,我发现几个已经被删除的文件,还在被一些进程使用着。
确定其中一个进程已经无用之后,我kill掉了它。看到对应的空间释放出来了。
不过,很多时候,这些进程是不能重启,或者说很不适合重启的。
既然不能重启,也就意味着文件句柄不会释放,唯一的办法就是定时清空,而不是删除文件。
> xxx.log
或者
echo “” > xxx.log
都可以。