最近工作中遇到了一个工作以来最难解决的问题,总结以下解决思路,环境是fedora27系统,系统莫名奇妙的宕机,具体现象描述如下:
1.系统没有规律的出现宕机,大概需要运行三小时以上;
2.系统出现宕机后,使用网络工具无法登录,使用终端无法登录,只有重启能恢复正常;
3.应用程序日志没有记录任何异常信息,只是停留在一定时间后,就不在记录日志信息了,系统一共运行三个应用程序,到相同的时间点,都不记录日志信息了;
4.使用top命令监控应用程序的CPU使用情况和内存使用情况,并没有任何的异常;
5.使用lsof命令查下应用程序文件句柄的使用情况,也无任何异常;
6.查看系统/var/log目录下的日子文件,未看到任何使系统宕机的有用信息;
7.系统像中病毒一样,不同的设备时不时的出现宕机,主要是得不到任何具有参考意义的判断异常原因;
此问题消耗大概半个月的工时,现已查找到问题所在,希望不在遇到此类问题,具体查找办法做以下总结,具体如下:
1.依据功能需求修改完代码后提交到测试组,并没有马上测试,而是多个需求叠加后才测试,这对查找问题带来了困难,建议不要这样做;
2.由于应用程序在不同的环境下运行,在低版本的环境运营没有问题,在高版本的运行环境中出现了问题,从运行环境上查找应用程序的差异,来定位问题所在;
3.通过对比工具,查看添加功能部分代码,确定可能造成以上现象的原因,重点关注系统调用级别代码;
4.通过模拟现场运行环境,来编写测试级别的应用程序,来确定关键部分代码的危险性来确定是否可能是造成以上现象的原因;
5.多设备运行,此类问题很难复现,所以测试环境非常重要,软件没有解决不了的问题,只是时间问题,所以测试是快速定位问题所在的关键;
6.应用程序的测试缺少稳定性测试环节,是造成本次问题造成不良影响的根本原因,没有及时发现问题,应用到线上带来了极其不好的有负面影响;
7.确定首次出现宕机的时间点,向前推最近应用程序功能更改项目,往往就是在出现宕机之前的功能需求更改造成的原因,这一点非常重要,能帮助你快速定位造成此异常的原因;
8.当从一个方向上去查找问题时,发现很长时间并无任何的进展的时候,可以换一种方式来解决问题,往往就很接近事实的真相,就差一层窗户纸一样,一捅就破,千万不能退缩,否则前功尽弃;
9.由于是运行三个应用程序,具体造成此问题的原因,可能没有你想象的那么简单,可能是其中一个应用程序造成的,也可能是不同应用程序相互竞争资源造成的,所以使用测试环境不断测试进行一一排除,不断缩小范围,这一点在此问题排查时,起了关键性作用;
10.真相自有一个,只要你不断的去追求真相,就一定能找到真相;
此问题已经定位问题所在,待出解决方案并测试通过后,再做解决方案总结;