GaussDB(DWS)实践系列—关于释放磁盘异常占用空间的经验总结
GaussDB(DWS)运维的那些事?
——关于释放磁盘异常占用空间的经验总结
一、 摘要
集群在运行过程中,可能会出现部分节点目录的磁盘使用率偏高,并且仍在不断增长的情况,如果不及时处理可能会因为磁盘使用率超限而影响集群正常运行。例如使用df –h查看到某个目录的磁盘使用率达到70%,远高于集群内的其他节点,但是使用du –sh命令查看对应目录并未发现异常占用磁盘空间的大文件。针对上述情况,就需要排查可能是哪个进程占用了已经被删除了的文件句柄,导致磁盘空间并未真正释放。本文档主要介绍如何通过清理残留进程,释放被异常占用的磁盘空间。
二、 原因说明
(一) Linux异常占用磁盘空间情况说明
在Linux操作系统中,当一个文件被删除后,在文件系统目录中已经不可见了,所以du就不会再统计它了。然而如果此时还有运行的进程持有这个已经被删除了的文件的句柄,那么这个文件就不会真正在磁盘中被删除,分区超级块中的信息也就不会更改,所以df 命令查看磁盘占用没有减少。本文主要通过排查清理此类的残留进程,释放磁盘空间。
(二) lsof命令说明
lsof是linux下用于查看打开的文件以及相关关联进程信息的工具,执行lsof,将输出系统中打开文件的信息,包括与文件关联的进程的名字、进程pid、用户、目录、socket套接字、和命名管道等。使用该工具来查找残留进程。
三、 操作实践
在巡检时发现节点10.77.20.XXX的根目录‘/’磁盘使用率达到 49%,明显高于其他节点,使用 du -sh * 命令查看该目录文件,未发现有大文件占用磁盘空间。
考虑到可能存在未知进程占用文件句柄,导致磁盘空间异常。需要运用lsof工具查看相关关联进程占用已经删除的文件句柄信息。
- 使用命令lsof | grep deleted 命令获取已经被删除但是仍然被应用程序占用的文件列表。
- 考虑到文件列表行数过多,包含其他目录文件信息,不便于筛选定位,将其导入到文件中进行查找。
参考命令:
lsof | grep deleted > deleted_info.log |
- 过滤其他目录信息
参考命令:
cat deleted_info.log | grep -v "/srv/BigData/mppdb " > new2.log |
- 最终定位到一个残留的bash 进程,占用文件句柄,且该目录下无法找到该文件。判断是此进程占用了文件句柄,导致磁盘异常占用,应及时清理该残留进程。
- 清理定位到的残留进程
参考命令:
kill -9 53249 (对应进程的pid) |
- 使用df -h命令再次查看磁盘空间,‘/’目录磁盘空间使用率从49%降为18%:
四、 总结延伸
从释放异常占用磁盘空间的操作过程分析,由于前期运维人员在删除过期文件时忽略了该文件是被进程占用的情况,删除了文件却没有重启或清除进程所导致的。因此在linux系统中删除累积性文件时可以使用lsof命令查看一下文件是否有被进程占用,在删除文件后可以重启或清除相关进程,避免产生磁盘空间异常占用,为日后维护带来不便。
- 点赞
- 收藏
- 关注作者
评论(0)