今天看到专家博客发布了此问题的处理方法(链接),恰好前不久也遇到过类似问题(LWQ删了程序的文件和日志,但没有结束进程,让人一阵好找),觉得有必要纳入到自己博客中来,奈何专家注明谢绝转载,所以,自己写吧。
部分程序因为设计需要,可能会产生巨大的日志文件,如果长期不清理,将造成磁盘空间被占满的问题
采用logrotate是个有效的办法(之前转载过该类文章),但对于已经占满磁盘的问题日志文件,等待logrotate轮替显然不太可能
由于应用持续在运行状态,直接删除这些日志文件也不能够释放它们的磁盘空间,虽然你已经看不到这些文件。
若此时用du -sh 的方式查看,目录的空间使用率已经回落,但是用df -h的方式查看,空间仍然被占用
通过lsof | grep delete 可以看到文件名后面跟着 (deleted),此时,只能通过重启对应进程的方式来释放磁盘空间。
-------------------------------------------------------
那么该采用何种方式来处理这类问题呢,答案其实很简单,可以通过重定向的方式将该文件覆盖写为空文件。
[root@localhost ~]# echo " " > /var/log/http/access.log ; kill -HUP PID
通过这种方法,磁盘空间可以立即释放,也可以确保锁定该文件的进程可以继续向文件写入日志
这种方法经常用于在线清理Apache、Tomcat等Web服务产生的日志文件。
也可以通过计划任务将此方法用来做日志轮替
cp -p /var/log/http/access.log; echo " " > /var/log/http/access.log ; kill -HUP PID
转载于:https://blog.51cto.com/foolishfish/1436453