删除大文件后空间无法释放的问题处理

日常维护中偶尔会碰到一些日志没有做拆分,越来越大,把存储占满的情况。在清理日志文件时,没有经验的运维可能上来就

rm  catalina.log

操作完之后,文件确实删掉了,而且程序会新建一个同名文件继续打日志,看起来好像可以收工了,但 df -h 看一下发现存储使用率并没有降下来!

这是因为在删除文件时,应用进程还持续占有该文件句柄,根据Linux的特性,这个文件的数据会被存放在进程映象中,导致文件系统上看已经正常了,但数据其实并没有被删除。

面对这种问题,最常见的解决办法就是重启应用进程,但是在生产环境下,重启应用可能会带来一定的业务损失。那么如果不想重启应用,则需要用如下方案来恢复:

  1. 用 lsof | grep catalina.log 找到占用日志文件的应用进程Pid, 如Pid=2587;
  2. 进入到 /proc/2587/fd/ 目录,通过ll就可以看到一个很大的catalina.log,这个就是占在内存映像中的数据文件;
  3. 使用命令 echo > catalina.log 清空这个文件;

这样就可以释放被吞掉的空间。

你可能感兴趣的:(linux运维)