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 命令,即直接将文件置空,并不影响服务的使用,文件大小也被控制下来,磁盘空间也释放了

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Linux 中的 CPU 使用率过高时,可以按照以下步骤来排查问题: 1. 使用 top 或 htop 命令查看当前 CPU 使用情况: ``` top ``` 或 ``` htop ``` 这些命令将显示当前运行中的进程及其 CPU 使用率。按下 "1" 键可以查看每个 CPU 核心的使用情况。 2. 检查哪些进程占用了大量的 CPU 资源: 在 top 或 htop 界面中,按下 "Shift + P" 键,可以按 CPU 使用率对进程进行排序。这样可以找到占用 CPU 资源较多的进程。 3. 查看进程的详细信息: 在 top 或 htop 界面中,选择一个占用较高 CPU 的进程,按下 "F" 键,然后选择 "P"(按 CPU 使用率排序),"C"(显示进程命令行),"T"(按进程运行时间排序)等选项,可以查看进程的详细信息。 4. 检查系统负载情况: 使用 uptime 命令查看系统负载情况: ``` uptime ``` 如果负载过高,表示系统中正在运行的进程过多,可能导致 CPU 资源紧张。 5. 检查系统日志: 使用 dmesg 命令查看系统日志,查找是否有异常或错误信息: ``` dmesg ``` 或者查看特定的日志文件,如 /var/log/syslog 或 /var/log/messages: ``` tail -n 100 /var/log/syslog ``` 6. 排查可能的问题: - 检查是否有恶意软件或病毒感染。 - 检查是否有不正常的进程或服务运行。 - 检查是否有配置错误或不合理的应用程序。 - 检查是否有大量的网络流量导致 CPU 负载过高。 - 检查是否有磁盘 I/O 瓶颈导致 CPU 资源被阻塞。 根据具体情况,采取相应的措施来解决 CPU 使用率过高的问题。可能需要停止或重启占用大量 CPU 资源的进程,优化应用程序配置,增加硬件资源等。如果问题持续存在,可以考虑进行性能分析和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

忍冬行者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值