近期在整理一些运维问题处理笔记,这篇主要是记录排查思路转换,以及实用的排查方式,这是个比较简单的案例,希望有所帮助
某天,有一台服务器磁盘空间告警,我依稀记得磁盘分区有14T,平时数据量不会太大的,于是认为是异常的数据量,需要进行排查。
1)先找找找可以清理的历史数据以及历史日志,一般有定时任务的,直接跑清理任务即可。
发现,由于前期上线认为分区很大,上线后没有添加清理任务;
如果是接手的项目,不知道哪里有定时任务怎么办?可以看看如下博客,排查定时任务。
一般定时任务位置:
查看 root 以及应用的部署用户(这里用appuser代替)下是否有定时清理任务
crontab -l -u appuser
crontab -l -u root
atq
或者 查看定时任务日志
grep -e 'sh|log' /var/log/cron
2)尝试常规排查流程,通过 du 命令缩小范围,然后定位到磁盘占用高的目录
一般来说,像容器主机容量异常,一般都是容器应用的某些数据没有挂载出来,导致没有正常清理,不过这个不是容器主机,当然大致排查流程也是一样,就是目录不同罢了
du -sh /data
等了一会,发现没得反应呢?因为du 是遍历目录,然后计算总量的,目前14T,这个计算量大的很,此路不通。
3)发现磁盘使用率增速过快,每10分钟增长近100G
前面说了du计算不出来,上面的情况如何统计的呢?那当然是df ,df 直接从文件系统超级块获取容量。
4)pwdx 查看进程的工作目录,lsof 查看进程写入的文件位置
5)针对应用和数据的处理,就不多赘述了,具体是应用逻辑BUG,导致数据循环写入
1)iotop 能更好的浏览大致情况,pidstat 能更好的确定问题范围
2)一个具体的解决办法并不能覆盖到所有的问题,重要的是思路,扩展一些广度