系统卡死问题解决思路

最近工作中遇到了一个工作以来最难解决的问题,总结以下解决思路,环境是fedora27系统,系统莫名奇妙的宕机,具体现象描述如下:

1.系统没有规律的出现宕机,大概需要运行三小时以上;

2.系统出现宕机后,使用网络工具无法登录,使用终端无法登录,只有重启能恢复正常;

3.应用程序日志没有记录任何异常信息,只是停留在一定时间后,就不在记录日志信息了,系统一共运行三个应用程序,到相同的时间点,都不记录日志信息了;

4.使用top命令监控应用程序的CPU使用情况和内存使用情况,并没有任何的异常;

5.使用lsof命令查下应用程序文件句柄的使用情况,也无任何异常;

6.查看系统/var/log目录下的日子文件,未看到任何使系统宕机的有用信息;

7.系统像中病毒一样,不同的设备时不时的出现宕机,主要是得不到任何具有参考意义的判断异常原因;

此问题消耗大概半个月的工时,现已查找到问题所在,希望不在遇到此类问题,具体查找办法做以下总结,具体如下:

1.依据功能需求修改完代码后提交到测试组,并没有马上测试,而是多个需求叠加后才测试,这对查找问题带来了困难,建议不要这样做;

2.由于应用程序在不同的环境下运行,在低版本的环境运营没有问题,在高版本的运行环境中出现了问题,从运行环境上查找应用程序的差异,来定位问题所在;

3.通过对比工具,查看添加功能部分代码,确定可能造成以上现象的原因,重点关注系统调用级别代码;

4.通过模拟现场运行环境,来编写测试级别的应用程序,来确定关键部分代码的危险性来确定是否可能是造成以上现象的原因;

5.多设备运行,此类问题很难复现,所以测试环境非常重要,软件没有解决不了的问题,只是时间问题,所以测试是快速定位问题所在的关键;

6.应用程序的测试缺少稳定性测试环节,是造成本次问题造成不良影响的根本原因,没有及时发现问题,应用到线上带来了极其不好的有负面影响;

7.确定首次出现宕机的时间点,向前推最近应用程序功能更改项目,往往就是在出现宕机之前的功能需求更改造成的原因,这一点非常重要,能帮助你快速定位造成此异常的原因;

8.当从一个方向上去查找问题时,发现很长时间并无任何的进展的时候,可以换一种方式来解决问题,往往就很接近事实的真相,就差一层窗户纸一样,一捅就破,千万不能退缩,否则前功尽弃;

9.由于是运行三个应用程序,具体造成此问题的原因,可能没有你想象的那么简单,可能是其中一个应用程序造成的,也可能是不同应用程序相互竞争资源造成的,所以使用测试环境不断测试进行一一排除,不断缩小范围,这一点在此问题排查时,起了关键性作用;

10.真相自有一个,只要你不断的去追求真相,就一定能找到真相;

此问题已经定位问题所在,待出解决方案并测试通过后,再做解决方案总结;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python线程卡死问题通常是由于线程死锁或者死循环等问题引起的。以下是几种解决Python线程卡死问题的方法: 1. 使用锁机制 线程死锁的问题通常是由于多个线程互相等待对方释放资源,导致所有线程都处于等待状态。可以使用Python中的锁机制来避免这个问题。例如,可以使用threading模块中的Lock来实现简单的互斥锁机制: ``` import threading lock = threading.Lock() def func(): with lock: # 可执行的代码 ``` 2. 添加超时时间 如果线程卡死在一个无法预知的操作中,可以使用超时时间来避免线程无限等待。例如,可以使用threading模块中的Timer来实现超时机制: ``` import threading def func(): # 可能会导致线程卡死的操作 t = threading.Timer(5.0, func) t.start() t.join() ``` 上述代码中,创建了一个定时器线程,在5秒后调用func函数。如果在5秒后func函数还没有执行完毕,定时器线程将会结束。可以根据实际情况调整等待时间。 3. 使用守护线程 如果一个线程在执行过程中,不需要在主线程结束之前都执行完毕,可以将该线程设置为守护线程。当主线程结束时,所有守护线程都会被强制结束。可以使用threading模块中的setDaemon方法将一个线程设置为守护线程: ``` import threading import time def func(): while True: # 可执行的代码 time.sleep(1) t = threading.Thread(target=func) t.setDaemon(True) t.start() ``` 上述代码中,创建了一个线程,并将该线程设置为守护线程。当主线程结束时,该线程也会被强制结束。 总之,线程卡死问题解决方法多种多样,需要根据具体情况采取不同的方法来解决
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值