一台Linux操作系统部署的Mysql数据库服务器平时“/"目录占用很低,但每个小时都会出现一次根目录空间占用高的情况,本文系从OS侧对异常事件进行分析排查的过程。
1、初步分析
主机已进行监控,分析监控图表

可见该数据库服务器日常根目录占用在20%,每个小时会出现一个峰值,根占用增到80%左右,目录空间大小占用的采样粒度为每5分钟采样一次,按采样值定位报告如下图

可见每个小时第8分钟的前后4分钟即可能会是异常时段,之后即会恢复正常。
2、深入跟踪
首先尝试用du来抓取大文件
指令:
# watch 'du -h -d1 / 2>/dev/null' 
Every 2.0s: du -h -d1 / 2>/dev/null                                                                                                 Fri May 19 11:12:32 2023
113M    /boot
0       /dev
0       /proc
809M    /run
0       /sys
32M     /etc
832K    /root
307M    /var
356K    /tmp
1.3G    /usr
915M    /home
0       /media
0       /mnt
202M    /opt
0       /srv
2.9G    /tools
633G    /app
639G    / 
对根下1层的目录进行空间占用跟踪。实际操作在问题时段没有抓取到目录空间有异常。根据经验,这种情况应该是文件生成过程中有删除操作,有删除标识的在用文件不会统计到目录空间占用里来。联系到监控数据显示空间占用后会恢复,因此可以确定必然有文件删除动作伴随,改以监控文件删除情况来入手定位问题原因。
以下指令(在openeuler22.03平台测试通过,shell指令,其它Linux也应无误):
# lsof |grep delete |sort -nrk 8
zabbix_ag  6594        zabbix    2w      REG              253,0        761   50695552 /var/log/zabbix/zabbix_agentd.log-20210916 (deleted)
zabbix_ag  6594        zabbix    1w      REG              253,0        761   50695552 /var/log/zabbix/zabbix_agentd.log-20210916 (deleted)
salt-mini  8655          root    6w      REG              253,0       1751   17422681 /var/log/salt/minion-20230428 (deleted)
mysqld    17665           dpm   12u      REG              253,0          0   17094890 /tmp/ibXK7PPH (deleted)
mysqld    17665           dpm    7u      REG              253,0     123582   16983485 /tmp/ibw2ey6x (deleted)
mysqld    17665           dpm    6u      REG              253,0          0   16983481 /tmp/ib2TGg4h (deleted)
mysqld    17665           dpm    5u      REG              253,0          0   16983476 /tmp/ibt9PY0a (deleted)
mysqld    17665           dpm    4u      REG              253,0          0   16983466 /tmp/ib4ggHX3 (deleted)
sshd      32667          ygpt  txt       REG              253,0     970920     864548 /usr/sbin/sshd;642530f7 (deleted)
sshd      32663          root  txt       REG              253,0     970920     864548 /usr/sbin/sshd;642530f7 (deleted)
mysqld    17665  9991     dpm    7u      REG              253,0     123582   16983485 /tmp/ibw2ey6x (deleted)
mysqld    17665  9639     dpm    7u      REG              253,0     123582   16983485 /tmp/ibw2ey6x (deleted)
mysqld    17665  9127     dpm    7u      REG              253,0     123582   16983485 /tmp/ibw2ey6x (deleted)
mysqld    17665  8631     dpm    7u      REG              253,0     123582   16983485 /tmp/ibw2ey6x (deleted)
...... 
过滤当前删除但未释放空间的文件并按文件大小进行排序。
考虑到监控5分钟的粒度问题,从4分开始进行watch操作,并对排在前面的信息进行同步录屏,反指令:
# watch 'lsof |grep delete |sort -nrk 8 ' 
在录屏2分钟后(即整点后第6分钟左右),开始出现大文件(1G)删除操作

在录屏3分钟左右即整点后第7分钟左右),出现文件大小峰值(8.6G)的文件删除操作

相关大文件均是位于/tmp目录下的临时文件。
视频文件如下:
Video_20230519100921
lsof命令的输出字段如下:
COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME
对应监控结果分析可知,系dpm帐户每个小时以mysqld命令调用在/tmp目录下生成了近9G的临时文件,然后又删除了。
3、处置措施
因是数据库系统的定时操作,故通知Mysql数据库侧对期定期任务进行排查处理,本次根目录空间占用问题定位完成。



















