麒麟臂不服不行

# 蓝月登峰
SLOW MAKES BETTER
  1. 首页
  2. 随笔
  3. 正文

磁盘空间没有释放的问题

2022年7月1日 1876点热度 1人点赞 0条评论

周六的时候接到一台服务器磁盘空间100%的告警,和平时一样登陆上服务器准备删掉点日志,却发现日志文件已经被删掉了,很是费解既然没有日志被删掉了为啥还能导致磁盘占满了呢?

df和du看一下磁盘空间

df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             251G  251G   0  100% /data

/data目录果然显示占满了,赶紧查看下哪些文件导致的

du -h --max-depth=1 /data
62G    /data/log
62G    /data

这里/data/log只占用了62G,log日志明明被删除了,为啥磁盘还是被占用?


google了一番,发现很多人都碰到了这个问题,原因如下:

在Linux或者Unix系统中,通过rm或者文件管理器删除文件,只是将它会从文件系统的目录结构上解除链接(unlink),也就是说只是删除了文件和系统目录结构的链接;如果文件在删除时是被打开的(有一个进程正在使用该文件,文件被进程锁定或者有进程一直在向这个文件写数据等)状态,那么进程将仍然可以读取该文件,也就是说没有删除掉文件在读取的状态,所以磁盘空间也就会一直被占用。

看到这里我就明白了,赶紧ps了一下是不是有python进程没退出(因为我这里是会多进程处理,可能某些原因导致进程未正常退出),果然有异常进程,直接kill掉,在df一下磁盘空间已经释放了


这里同时摘抄一下网络上提供的其他方法:

  1. 通过lsof|grep deleted命令获取到已经被删除但是仍然被应用程序占用的文件列表,然后kill掉还在占用所删除文件的进程。需要注意的是:如果有很多进程都在使用所删除文件,那么采用第1种方式kill进程就有点麻烦了,而且风险也比较大。因为kill进程是通过截断proc文件系统中的文件可以强制要求系统回收分配给正在使用的的文件。必须要确定不会对运行中的进程造成影响时才能使用,应用程序对这种方式支持的并不好,当一个正在使用的文件被截断可能会引发不可预知的问题。
  2. 或停掉或重启使用这个所删除文件的应用,让OS自动回收磁盘空间。
  3. 也可以重启操作系统,不过这并不是最好的方法
  4. 对待这种进程不停对文件写日志的操作,要释放文件占用的磁盘空间,最好的方法是在线清空这个文件。通过这种方法,磁盘空间不但可以马上释放,也可保障进程继续向文件写入日志。

小分析一下:
第一种方式是未被释放的文件可能被多个进程使用,这种情况下强行截断文件会对运行中的进程有影响
第二种方式就是直接kill进程,也是我采用的方式,因为这里我确认没有其他进程用这个日志了,这里第一和第二加起来才算一种方式吧,不知道原作者这里为啥要分开
第三种重启系统,这? 不到万不得已,一般人不会这么干吧
第四种清空这个文件,这个是对第一种方式的一种补充(我比较推荐),大概的用法就是如下:

> xxx.log

参考文章:
https://cloud.tencent.com/developer/article/1027207

标签: linux
最后更新:2022年7月1日

mysens

Keep Code Simple

点赞
下一篇 >
订阅评论
提醒
guest

guest

0 评论
内联反馈
查看所有评论

mysens

Keep Code Simple

最新 热点 随机
最新 热点 随机
istio环境下mysql连接失败问题 常见的docker hub mirror镜像仓库 wordpress使用云服务实现图片上传自动添加水印 jdk8默认开启UseAdaptiveSizePolicy造成的fullgc CPU伪共享的浅析 docker + nginx + wordpress建站
CPU伪共享的浅析 istio环境下mysql连接失败问题 免费HTTPS证书申请 docker + nginx + wordpress建站 磁盘空间没有释放的问题 常见的docker hub mirror镜像仓库
标签聚合
CPU CA 证书 非对称加密 安全 HTTPS 建站 对称加密

COPYRIGHT © 2022 麒麟臂不服不行. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

鄂ICP备18005036号

鄂公网安备 42010602004698号

wpDiscuz