Linux磁盘空间异常爆满的排查和处理方式
问题现象
在服务器运维过程中,我们时常会遇到这样的情况,服务器磁盘空间使用率达到100%,业务出现异常。
问题定位
1.登录服务器,通过df -Hl查看
[root@k8s-master1 ~]# df -Hl 文件系统 容量 已用 可用 已用% 挂载点 devtmpfs 8.4G 0 8.4G 0% /dev tmpfs 8.5G 0 8.5G 0% /dev/shm tmpfs 8.5G 774M 7.7G 10% /run tmpfs 8.5G 0 8.5G 0% /sys/fs/cgroup /dev/mapper/centos-root 136G 68G 68G 51% / /dev/sda1 1.1G 238M 827M 23% /boot
2.查找占用空间大的目录或文件
笨方法:在根目录下,通过du -hs命令,列出各目录所占空间大小
[root@k8s-master1 /]# du -hs * 0 bin 194M boot 1012K core.580 0 dev 37M etc 21M home 7.7G kuboard-data 0 lib 0 lib64 0 media 0 mnt 135M opt du: 无法访问"proc/21212/task/21212/fd/3": 没有那个文件或目录 du: 无法访问"proc/21212/task/21212/fdinfo/3": 没有那个文件或目录 du: 无法访问"proc/21212/fd/3": 没有那个文件或目录 du: 无法访问"proc/21212/fdinfo/3": 没有那个文件或目录 0 proc 1.6G root 738M run 0 sbin 0 src 0 srv 0 sys 6.2M tmp 3.2G usr 51G var
相对高效一点的方法是通过du的-d参数,或--max-depth,设置查询的目录深度
du -h -d 2|grep [GT] |sort -nr du -h --max-depth=2|grep [GT] |sort -nr #通过这样的方式,可以搜出以G或者T为单位的占用磁盘空间的大目录,并排序 [root@k8s-master1 /]# du -h -d 1 / 194M /boot 0 /dev du: 无法访问"/proc/24731/task/24731/fd/3": 没有那个文件或目录 du: 无法访问"/proc/24731/task/24731/fdinfo/3": 没有那个文件或目录 du: 无法访问"/proc/24731/fd/4": 没有那个文件或目录 du: 无法访问"/proc/24731/fdinfo/4": 没有那个文件或目录 0 /proc 738M /run 0 /sys 37M /etc 1.6G /root 51G /var 6.2M /tmp 3.2G /usr 21M /home 0 /media 0 /mnt 135M /opt 0 /srv 0 /src 7.7G /kuboard-data 64G /
效率高的方法,使用find进行查找,比使用du效率要高
find / -type f -size +1G -exec du -h {} \; #查找文件大于10G的文件遇到问题
操作删除了一些备份文件和日志信息后,查看空间仍然不足,发现删除的日志,空间并没有释放。
未释放磁盘空间的原因:
在Linux或者Unix系统中,通过rm或者文件管理器删除文件将会从文件系统的文件夹结构上解除链接(unlink),然而假设文件是被打开的(有一个进程正在使用),那么进程将仍然能够读取该文件,磁盘空间也一直被占用。而我删除的是nginx的访问日志文件,在删除的时候该文件正在被使用。
处理办法
[root@local ~]# lsof |grep deleted nginx 4399 root 38w REG 253,0 19304448 10835682 /var/nginx/logs/t-access.log (deleted) nginx 4399 root 39w REG 253,0 3502080 10835684 /var/nginx/logs/t-error.log (deleted) nginx 4401 nobody 38w REG 253,0 19304448 10835682 /var/nginx/logs/t-access.log (deleted) nginx 4401 nobody 39w REG 253,0 3502080 10835684 /var/nginx/logs/t-error.log (deleted)
从输出的结果可以看到 /var/nginx/logs/t-access.log 和 t-error.log 还在被使用中,所以导致未释放空间。
那么如何让进程释放呢?
- 方法1:直接 kill 掉相应的进程,或者停掉使用这个文件的应用,让操作系统自己主动回收磁盘空间。
- 方法2:以后清理正在被读写的大日志文件时,直接使用 echo "" > xxx.log 命令,即直接将文件置空,并不影响服务的使用,文件大小也被控制下来,磁盘空间也释放了
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
ubuntu20.04 LTS系统默认源sources.list文件的修改
这篇文章主要介绍了ubuntu20.04 LTS系统默认源sources.list文件的修改,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-08-08
解决CentOS 7升级Python到3.6.6后yum出错问题总结
这篇文章主要介绍了CentOS 7升级Python到3.6.6后yum出错问题解决总结,本文给大家介绍的非常详细具有一定的参考借鉴价值,需要的朋友可以参考下2019-09-09
linux输入yum后提示: -bash: /usr/bin/yum: No such file or director
在本篇文章里小编给大家整理的是关于linux输入yum后提示: -bash: /usr/bin/yum: No such file or directory的解决方法,有需要的朋友们参考下。2019-11-11


最新评论