记录一次服务器“卡死”故障的解决过程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记录一次服务器“卡死”故障的解决过程相关的知识,希望对你有一定的参考价值。

晚上8点多突然收到zabbix报警,服务器负载高,IO负载高。看到报警信息马上就猜到,老问题又出现了上次的方法没能解决问题,故障回顾

故障背景:
系统:ubuntu 14.04
服务器:kvm虚拟机

故障现象:
1.系统存在大量僵死进程,kill -9杀不掉
2.系统IO负载很高
3.执行命令时,终端会卡死
4.reboot无法正常重启服务器,只能杀虚拟机进程
5.系统日志里有以下信息 INFO: task jbd2/vda1-8:775 blocked for more than 120 seconds.
技术分享图片

上次出现这个问题是3天前,当时网上查阅资料说是将内存脏页数据刷入磁盘时出现了问题,导致系统阻塞了很多其他进程,从而产生大量僵死进程,按照网上方法,修改调整内核参数:

vm.dirty_ratio = 10
vm.dirty_background_ratio = 5

-------------------------------回顾到此结束--------------------------------

登陆服务器一看,果然还是这个问题,很显然上次的内核参数调整没能解决问题,接下来继续分析,通过一番检查有以下突破性新发现:
1.操作时使用tab补全命令会导致终端卡死,不使用tab则可以正常执行命令
2.一个核心的cpu 100%花在了IO等待上

第一个发现让我想起了一次以前处理故障的经历,/tmp目录满了,导致一使用tab补全命令就卡死,跟今天现象一样,马上检查/tmp分区使用情况,du命令发现/tmp分区是挂载在一个单独100G的硬盘上,只使用了60M,排除空间问题。接着尝试touch /tmp/test测试分区的读写,问题出现了,终端卡死,/tmp分区无法读写,找到了问题突破口

为什么这个分区会无法读写呢,继续排查,mount -l /tmp强制卸载分区然后重新挂载,问题依旧,/tmp无法读写。接着登陆虚拟机控制台,查看块独立硬盘的信息,发现这块独立硬盘用的VirtIO模式,其他硬盘都是IDE模式,很可能问题出在这里。于是新增了一个IDE的硬盘,替换了VirtIO硬盘,然后后重新挂载格式化并重新挂载到/tmp,故障处理告一段落,处理完到今天5天了,问题没在出现,基本可以确定问题是出在虚拟硬盘的模式了。更深一层,为什么virtIO有问题IDE就没问题,要后面继续研究了

总结:
故障第一次出现时没有足够重视,没有深入分析,直接搬用网上”解决方案“,导致故障第二次出现。网上资料很多,也很有用,但要结合实际情况取舍,遇到问题要能独立思考并结合自己以前的经验多分析,提高自己分析问题能力的同时让自己的知识更加融会贯通

以上是关于记录一次服务器“卡死”故障的解决过程的主要内容,如果未能解决你的问题,请参考以下文章

linux:记录一次 处理tomcat启动卡死无报错现象的曲折过程

oracle 执行存储过程时出现卡死

报错记录解决SSH远程执行脚本卡死(假死)的问题

记录一次MySQL两千万数据的大表优化解决过程,提供三种解决方案

一次故障解决过程梳理

记录一次Linux远程连接故障排查