磁盘撑爆了

今天星期一,一上班就碰到两个问题,整理记录一下。

一、磁盘爆了

测试妹子在做功能测试的时候,发现服务端接口没有返回数据,后端技术兄弟登录测试环境去处理,重新执行了发布脚本然后发现应用无法启动,折腾了好一会儿没搞定,我本来不太想处理这种事的,一个原因是对于任何一个开发人员来讲,除了会写业务逻辑代码,也必须能够快速解决各种问题,他们需要在处理问题中成长,另外一原因我本来就懒,团队里别人能做的事我都尽量不去做,实在没有办法我才会介入具体技术问题的处理,但今天系统要发布,不想拖得太晚,下面是处理的步骤:

1、检查应用启动日志

发现有一个ScheduleJobService类启动报错,错误信息如下:

这是一套开源的Java定时任务管理框架,其他同事整合进来我一直没有关注(下次整理一下),第一个想法是这个怎么会报错,这次版本肯定没有改动这块相关的代码,然后不管3721,自己再重新执行发布脚本(常规操作,重启能解决80%的问题),然并卵照样报错,太不给面子了。

2、检查数据库

测试环境的数据库为了节省成本没有用云RDS,而是自己下载开源MySQL搭建的,怀疑是不是数据死锁了什么问题造成的(解决问题时要怀疑一切,而不是肯定这个不会造成那个不会造成),执行了show processlist,发现两条SQL一直堵塞着。

将两条SQL KILL掉,开始没KILL掉,KILL了两次都KILL不掉,那就不客气了把MySQL重启一下,芭比Q了,MySQL启动不了,怀疑前段时间在整BinLog把BinLog索引文件折腾坏了,那就把mysql-bin.index删掉,再重启还是启动不了,然后看一下数据库日志,发现报/var/run/mysqld/mysqld.sock.lock无法创建,进入/var/run发现mysqld目录没了那就手工创建一下,然后启动MySQL就成功了。 

3、重新启动应用

数据库正常了,也没有阻塞的SQL了,我们再启动应用,很遗憾还是不给面子,发现又是SQL报错,这时候就开始怀疑是否磁盘满了,然后用df命令查一下磁盘100%,好吧,那就把一些日志删除掉,再重启就好了。

注:这里还增补了qrtz定时任务表的数据,解决数据不一致的问题造成无法启动,这个下下次再梳理。

4、检查磁盘占用情况

要清理磁盘,首先要找到哪些文件或目录占用空间比较大,这个可以切换到根目录下一层层执行du -h --max-depth=1,这个命令虽然很简单但其实很多没有做过运维的开发可能并不知道,并不是只有高深的知识才有价值,能解决实际问题的知识就是有价值的。

注:从我介入开始整个过程大约持续了1个小时,其实很不应该的,测试环境一般出现问题大概率是磁盘撑爆了,因为对于生产环境我们会去做日志归档,但测试环境一般都懒得去做,满了再处理一下就好,以前也有几次磁盘满了造成GitLab无法提交连接,这次因为受奇怪的日志误导造成折腾了1个小时。

废话那么多其实是为了凑字数,总结起来其实就是:

磁盘满->qrtz定时任务管理器 delete语句阻塞-> 定时任务管理器数据不一致->应用无法启动。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值