记一次磁盘空间满问题排查
云上的一台 ORACLE 测试库磁盘又满了,之前满过,没详细分析,这次又满了,想着要找到根本原因。纪录如下:
登录服务器查看,磁盘空间 /
使用率 100%
1 | [root@xxx:/root]# df -h |
通过命令du -sh /*|grep G
进一部分查看占用磁盘空间较多的磁盘目录,进一步发现是 /va/log
下的messages
占用较多
1 | [root@xxx:/var/log]# du -sh ./*|grep G |
仔细查看 messages
的内容,被刷入了 top的信息,更过分的是3秒钟刷新一次。
1 | Jun 5 15:02:19 xxx top: top - 15:02:19 up 274 days, 23:50, 2 users, load average: 0.02, 0.71, 2.51 |
整整齐齐的 3 秒一次。一周就产生了 接近2G的数据,一个月就是8G,我本来就 40G的磁盘空间。
我首先检查了定时任务,确认没有定时任务,也没有开机启动脚本。
1 | [root@xxx:/root]# grep -r "top -b" /etc/cron* |
找不到头绪,然后通过ps 检查进程,果然发现了 top 进程,还带了- b参数,还是2024年运行的,吼吼,先kill掉看看是不是 messages再刷新,发现多了三行systemd的信息,messages也不刷新了。
1 | [root@xxx:/var/log]# ps -ef |grep top |
简单总结就是:通过ps
命令发现有一个24年启动的top -b
进程(PID 7394)。我们已经使用kill -9 7394
kill了该进程,但随后在messages
日志中出现了systemd
关于toptest.service
失败的记录,并且 messages
也不再更新
那就是肯定是这个进程产生的的。问题还是通过 system的 toptest.service
服务产生的,查看这个服务的状态信息,可以看到 进行 7394 进行被 kill了。状态是 faile
1 | [root@xxx:/var/log]# systemctl status toptest.service |
查了下资料(来源于大模型):
- 配置文件位置
/run/systemd/system/toptest.service
/run/
是临时文件系统,意味着这个服务配置不会持久化(重启后消失) - static:表示这是一个”静态”服务(不能直接启动,通常被其他单元依赖)
- vendor preset: disabled:默认不启用(由系统供应商预设)
- Drop-In 目录:
/run/systemd/system/toptest.service.d
- 配置片段:
50-Description.conf
:服务描述配置50-ExecStart.conf
:包含实际的启动命令/usr/bin/top -b
50-Slice.conf
:资源限制配置(cgroups)
检查配置文件信息如下:
1 | [root@xxx:/run/systemd/system/toptest.service.d]# cat /run/systemd/system/toptest.service |
目前来看配置文件确实只在 /run
目录下,/etc
下不存在。
1 | [root@xxx:/var/log]# ls -l /etc/systemd/system/toptest.service |
目前可以确定 messages 是被 toptest.service
服务打满了。下面就是清理了,实际上这个不用清理,只在内存里,也不启动。直接清理 messages 即可。
原文作者: liups.com
原文链接: http://liups.com/posts/4759d282/
许可协议: 知识共享署名-非商业性使用 4.0 国际许可协议