上班后发现某个日志文件cmq.log超过70G,想起前两天用来抓包后忘了关闭。
于是直接执行了删除操作, rm cmq.log
文件删除成功,但磁盘空间未恢复,/home/目录原本只有63G,现在还有145G。
image.png

1、通过lsof 命令查看,已经删除但是未被关闭的文件
lsof |grep deleted
发现了几个在两周前打开的日志文件,都是由某个常驻服务打开的。
于是,重启该服务。在用 lsof命令查看,没有了。

此时,/home 释放了9个G,还剩136G。
image.png

前面删除的70G 仍然未恢复。

2、想到是tcmpdump抓包产生的日志,通过ps查看进程:
image.png
抓包命令是 tcpdump -i any -Xnnpls0 tcp and dst port 8000
kill tcpdump进程,再查看磁盘占用
image.png
空间已释放。

总结:
1、文件直接使用rm命令删除磁盘未清空,因为存在如下的情况:

- 删除后仍然有进程在使用(打开后一直未退出)
- 或:有进程一直在往文件写入数据:
    - 文件并未真正的删除,可以简单理解为文件指针(引用)还存在,OS判定文件未被删除,不会回收空间

上述两种情况,分别可以用lsof结合ps 重启/kill进程处理

2、大文件建议先使用 echo " " > xx.log 或者 truncate 减小文件大小,查看实际的磁盘占用清空,然后再执行删除。

3、针对log文件大小/磁盘占用清空 增加监控,及时告警处理


cloudxh
4 声望0 粉丝