当前位置: 代码网 > 服务器>服务器>Linux > Linux磁盘空间异常爆满的排查和处理方式

Linux磁盘空间异常爆满的排查和处理方式

2024年12月19日 Linux 我要评论
问题现象在服务器运维过程中,我们时常会遇到这样的情况,服务器磁盘空间使用率达到100%,业务出现异常。问题定位1.登录服务器,通过df -hl查看[root@k8s-master1 ~]# df -h

问题现象

在服务器运维过程中,我们时常会遇到这样的情况,服务器磁盘空间使用率达到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 命令,即直接将文件置空,并不影响服务的使用,文件大小也被控制下来,磁盘空间也释放了

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com