早晨刚到公司,收到同事推送的一条生产机器磁盘使用率<90%的告警,我们的机器部署了日志清理脚本一般仅保存2~3天的日志,其他都会上传到ES,通过ELK模式管理。按理说,不应该是日志太大,但机器上能占用磁盘的除了一些服务安装包也只有日志了,遂开始排查。
第一步,当然是确认磁盘的当前占用率,登陆上机器执行 “df -h” 命令查看挂载盘占用率,果然非常高,已经达到了96%
第二步,确认占用率高的文件夹,排查是哪些文件占用磁盘,执行命令 “du -h --max-depth=1” 发现占用量最大的还是log目录
但是却发现了问题,从磁盘占用量我们能看出来,磁盘使用率96%,Used=179G,可是/data下各文件夹总的使用量才86G,那其他被占用的约100G的磁盘去哪里了呢?
第三步,搜寻资料,定位问题。根据自己薄弱的运维知识,这超出了我的知识面。谷歌之后发现,这种问题并不离奇是操作系统常见的问题。根据博客 https://www.jianshu.com/p/e775b6880133找到思路。可能是有文件,删除时被系统在使用未真正删除掉,依然占用着磁盘但是又看不到。执行命令 lsof|grep delete来查看删除文件
果然发现,有一个服务的log文件非常大,虽然被删除但是由于服务还在写入所以并未真的删除掉,导致磁盘占用。中间那一行是文件大小,可以看出来差不多100G。之所以有多条记录,是因为多线程在写入。
第五步,问题处理,面对这样的问题,只有一种处理方式就是重启服务,服务停止后,文件也会被释放,磁盘占用率瞬间下降。
总结:在window系统上,如果想删除一个正在被进程使用的文件,系统会阻止删除操作。Linux也同理,不过Linux在删除时不会报错,会假装的让你看到以为删除了,但文件被进程依然关联着并在写入,磁盘占用也还在。但通过du -h 扫不出来。所以无论在什么系统,不要尝试删除一个正在被进程使用的文件。
知识点总结:
查看磁盘占用率:df -h
查看每个文件夹大小:du -h --max-depth=1 如果使用 du -h 可以递归看到所有文件大小
查看被进程使用的删除文件:lsof|grep delete
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。