一台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数据库侧对期定期任务进行排查处理,本次根目录空间占用问题定位完成。