系统重启原因的检测方法、装置及终端设备制造方法及图纸

技术编号:10259990 阅读:208 留言:0更新日期:2014-07-25 18:26
本公开实施例公开了一种系统重启原因检测方法、装置及终端设备,在智能终端重启后,所述系统重启原因检测方法首先需要获取系统日志文件,接着,查找系统日志文件中是否包含强制结束系统进程的进程消息,当包含强制结束系统进程的进程消息时,获取相关的线程堆栈数据,并根据所述线程堆栈数据获取导致系统死锁的原因;当导致系统死锁的原因为由于线程间互锁时,确定互锁的线程;当导致系统死锁的原因为线程持锁时间超过预设时间时,确定持锁时间超过预设时间的线程。从而在智能终端重启后能够快速检测出是否由于系统死锁导致重启,如果由于系统死锁导致重启,能够快速确定死锁的线程,无需研发人员逐条分析系统消息,因此,速度快、效率高。

【技术实现步骤摘要】
系统重启原因的检测方法、装置及终端设备
本公开涉及计算机
,特别是涉及系统重启原因的检测方法、装置及终端设备。
技术介绍
随着智能终端的广泛应用,智能终端设备生产商为了推出具有自己特色的产品,通常会针对自己的智能终端设备深度定制属于自己的系统(例如,Android系统)。由于系统研发人员对智能终端的系统认识不足,编写程序不规范,使得系统资源分配策略不当,导致进程(或线程)因竞争资源而产生死锁现象,进而导致系统频繁重启。但是,当智能终端重启后,系统研发人员需要逐条分析系统消息确定是否由于死锁导致智能终端重启,此种方式速度慢、效率低。
技术实现思路
本公开实施例中提供了系统重启原因的检测方法、装置及终端设备,以实现在智能终端重启后,能够快速、高效地检测出是否由于系统死锁导致重启,如果由于系统死锁导致系统重启时,能够快速确定导致系统死锁的线程。为了解决上述技术问题,本公开实施例公开了如下技术方案:第一方面,本公开提供一种系统重启原因的检测方法,包括:获取系统日志文件;查找所述系统日志文件中是否包含强制结束系统进程的进程消息;当系统日志文件中包含强制结束系统进程的进程消息时,获取线程堆栈数据,并根据所述线程堆栈数据获取导致系统死锁的原因;当导致系统死锁的原因为线程间互锁时,确定互锁的线程;当导致系统死锁的原因为线程持锁时间超过预设时间时,确定持锁时间超过预设时间的线程。结合第一方面,在第一方面第一种可能的实现方式中,还包括:查找所述强制结束系统进程的进程消息中是否包含线程名称,当所述强制结束系统进程的进程消息中包含线程名称时,执行获取线程堆栈数据的步骤;当不包含线程名称时,确定线程持锁时间超过预设时间导致系统死锁。结合第一方面或第一方面第一种可能的实现方式,在第一方面第二种可能的实现方式中,获取线程堆栈数据,并根据所述线程堆栈数据获取导致系统死锁的原因的步骤,采用如下方式:获取所述进程消息中第一线程对应的第一线程堆栈数据;查找所述第一线程堆栈数据中是否包含等待互斥锁消息,所述等待互斥锁消息包含持有第一线程所等待互斥锁的第二线程;当第一线程堆栈数据不包含等待互斥锁消息时,确定第一线程持锁时间超过预设时间导致系统死锁;当第一线程堆栈数据存在等待互斥锁消息时,获取持有第一线程所等待互斥锁的第二线程对应的第二线程堆栈数据;查找所述第二线程堆栈数据中是否包含等待互斥锁消息;当第二线程堆栈数据不包含等待互斥锁消息时,确定第二线程持锁时间过长导致系统死锁;当第二线程堆栈数据包含等待互斥锁消息时,判断第二线程与第一线程是否构成持锁依赖关系;当第二线程与第一线程构成持锁依赖关系时,确定由于线程间互锁导致系统死锁;当第二线程与第一线程未构成持锁依赖关系时,将持有第二线程所等待互斥锁的线程作为新的第二线程,返回执行获取新的第二线程对应第二线程堆栈数据。结合第一方面的第二种可能的实现方式,在第一方面第三种可能的实现方式中,判断第二线程与第一线程是否构成持锁依赖关系的步骤,采用如下方式:判断第一线程持有的互斥锁是否是第二线程所等待的互斥锁;当第一线程持有的互斥锁是第二线程所等待的互斥锁时,确定第一线程和第二线程间构成持锁依赖关系;当第一线程持有的互斥锁不是第二线程所等待的互斥锁时,确定第一线程和第二线程间未构成持锁依赖关系。结合第一方面的第二种可能的实现方式,在第一方面第四种可能的实现方式中,判断第二线程与第一线程是否构成持锁依赖关系的步骤,采用如下方式:根据获得的线程堆栈数据中的等待互斥锁消息,构建持锁依赖关系图数据;判断所述持锁依赖关系图数据中是否存在环路,如果所述持锁依赖关系图数据存在环路,确定由于环路上的各个线程构成持锁依赖关系。结合第一方面的第三种可能的实现方式或第一方面的第四种可能的实现方式,在第一方面的第五种可能的实现方式中,确定构成持锁依赖关系的线程为互锁的线程。第二方面,本公开还提供了一种系统重启原因的检测装置,包括:第一获取单元,用于获取系统日志文件;第一查找单元,用于所述系统日志文件中是否包含强制结束系统进程的进程消息;第二获取单元,用于当所述系统日志文件包含强制结束系统进程的进程消息时,获取线程堆栈数据,并根据获得的线程堆栈数据获取导致系统死锁的原因;第一确定单元,用于当导致系统死锁的原因为线程间互锁时,确定互锁的线程;第二确定单元,用于当导致系统死锁的原因为线程持锁时间超过预设时间时,确定持锁时间超过预设时间的线程。结合第二方面,在第二方面第一种可能的实现方式中,还包括:第二查找单元,用于查找所述强制结束系统进程的进程消息中是否包含线程名称,当所述强制结束系统进程的进程消息中包含线程名称时,触发第二获取单元获取线程堆栈数据;当不包含线程名称时,确定线程持锁时间超过预设时间导致系统死锁。结合第二方面或第二方面第一种可能的实现方式,在第二方面第二种可能的实现方式中,所述第二获取单元包括:第一获取子单元,用于获取所述进程消息中第一线程对应的第一线程堆栈数据;第一查找子单元,用于查找所述第一线程堆栈数据中是否包含等待互斥锁消息,所述等待互斥锁消息包含持有第一线程所等待互斥锁的第二线程;第一确定子单元,用于当第一线程堆栈数据不包含等待互斥锁消息时,确定第一线程持锁时间超过预设时间导致系统死锁;第二获取子单元,用于当第一线程堆栈数据存在等待互斥锁消息时,获取持有第一线程所等待互斥锁的第二线程对应的第二线程堆栈数据;第二查找子单元,用于查找所述第二线程堆栈数据中是否包含等待互斥锁消息;第二确定子单元,用于当第二线程堆栈数据不包含等待互斥锁消息时,确定第二线程持锁时间过长导致系统死锁;第一判断子单元,用于当第二线程堆栈数据包含等待互斥锁消息时,判断第二线程与第一线程是否构成持锁依赖关系;第三确定子单元,用于当第二线程与第一线程构成持锁依赖关系时,确定由于线程间互锁导致系统死锁;线程更新单元,用于当第二线程与第一线程未构成持锁依赖关系时,将持有第二线程所等待互斥锁的线程作为新的第二线程,并触发第二获取子单元获取新的第二线程对应的第二线程堆栈数据。结合第二方面第二种可能的实现方式,在第二方面第三种可能的实现方式中,所述第一判断子单元包括:第二判断子单元,用于判断第一线程持有的互斥锁是否是第二线程所等待的互斥锁;第四确定子单元,用于当第一线程持有的互斥锁是第二线程所等待的互斥锁时,确定第一线程和第二线程间构成持锁依赖关系;或者,当第一线程持有的互斥锁不是第二线程所等待的互斥锁时,确定第一线程和第二线程间未构成持锁依赖关系。结合第二方面第二种可能的实现方式,在第二方面第四种可能的实现方式中,所述第一判断子单元包括:构建单元,用于根据获得的线程堆栈数据中的等待互斥锁消息,构建持锁依赖关系图数据;第三判断子单元,用于判断所述持锁依赖关系图数据中是否存在环路;第五确定子单元,用于当所述持锁依赖关系图数据存在环路时,确定环路上的各个线程构成持锁依赖关系。结合第二方面第三种可能的实现方式或第二方面第四种可能的实现方式,在第二方面第五种可能的实现方式中,第一确定单元配置为确定构成持锁依赖关系的线程为互锁的线程。第三方面,本公开提供了一种终端设备,包括存储器,以及一个或者一个以上的指令,其中一个或者一个以上指令存储于存储器中,且经本文档来自技高网...
系统重启原因的检测方法、装置及终端设备

【技术保护点】
一种系统重启原因的检测方法,其特征在于,包括:获取系统日志文件;查找所述系统日志文件中是否包含强制结束系统进程的进程消息;当系统日志文件中包含强制结束系统进程的进程消息时,获取线程堆栈数据,并根据所述线程堆栈数据获取导致系统死锁的原因;当导致系统死锁的原因为线程间互锁时,确定互锁的线程;当导致系统死锁的原因为线程持锁时间超过预设时间时,确定持锁时间超过预设时间的线程。

【技术特征摘要】
1.一种系统重启原因的检测方法,其特征在于,包括:获取系统日志文件;查找所述系统日志文件中是否包含强制结束系统进程的进程消息;当系统日志文件中包含强制结束系统进程的进程消息时,获取线程堆栈数据,并根据所述线程堆栈数据获取导致系统死锁的原因;当导致系统死锁的原因为线程间互锁时,确定互锁的线程;当导致系统死锁的原因为线程持锁时间超过预设时间时,确定持锁时间超过预设时间的线程;其中,获取线程堆栈数据,并根据所述线程堆栈数据获取导致系统死锁的原因的步骤,采用如下方式:获取所述进程消息中第一线程对应的第一线程堆栈数据;查找所述第一线程堆栈数据中是否包含等待互斥锁消息,所述等待互斥锁消息包含持有第一线程所等待互斥锁的第二线程;当第一线程堆栈数据不包含等待互斥锁消息时,确定第一线程持锁时间超过预设时间导致系统死锁;当第一线程堆栈数据存在等待互斥锁消息时,获取持有第一线程所等待互斥锁的第二线程对应的第二线程堆栈数据;查找所述第二线程堆栈数据中是否包含等待互斥锁消息;当第二线程堆栈数据不包含等待互斥锁消息时,确定第二线程持锁时间过长导致系统死锁;当第二线程堆栈数据包含等待互斥锁消息时,判断第二线程与第一线程是否构成持锁依赖关系;当第二线程与第一线程构成持锁依赖关系时,确定由于线程间互锁导致系统死锁;当第二线程与第一线程未构成持锁依赖关系时,将持有第二线程所等待互斥锁的线程作为新的第二线程,返回执行获取新的第二线程对应第二线程堆栈数据。2.根据权利要求1所述的方法,其特征在于,还包括:查找所述强制结束系统进程的进程消息中是否包含线程名称,当所述强制结束系统进程的进程消息中包含线程名称时,执行获取线程堆栈数据的步骤;当不包含线程名称时,确定线程持锁时间超过预设时间导致系统死锁。3.根据权利要求1所述的方法,其特征在于,判断第二线程与第一线程是否构成持锁依赖关系的步骤,采用如下方式:判断第一线程持有的互斥锁是否是第二线程所等待的互斥锁;当第一线程持有的互斥锁是第二线程所等待的互斥锁时,确定第一线程和第二线程间构成持锁依赖关系;当第一线程持有的互斥锁不是第二线程所等待的互斥锁时,确定第一线程和第二线程间未构成持锁依赖关系。4.根据权利要求1所述的方法,其特征在于,判断第二线程与第一线程是否构成持锁依赖关系的步骤,采用如下方式:根据获得的线程堆栈数据中的等待互斥锁消息,构建持锁依赖关系图数据;判断所述持锁依赖关系图数据中是否存在环路,如果所述持锁依赖关系图数据存在环路,确定由于环路上的各个线程构成持锁依赖关系。5.根据权利要求3或4所述的方法,其特征在于,确定构成持锁依赖关系的线程为互锁的线程。6.一种系统重启原因的检测装置,其特征在于,包括:第一获取单元,用于获取系统日志文件;第一查找单元,用于所述系统日志文件中是否包含强制结束系统进程的进程消息;第二获取单元,用于当所述系统日志文件包含强制结束系统进程的进程消息时,获取线程堆栈数据,并根据获得的线程堆栈数据获取导致系统死锁的原因;第一确定单元,用于当导致系统死锁的原因为线程间互锁时,确定互锁的线程;第二确定单元,用于当导致系统死锁的原因为线程持锁时间超过预设时间时,确定持锁时间超过预设时间的线程;其中,所述第二获取单元包括:第一获取子单元,用于获取所述进程消息中第一线程对应的第一线程堆栈数据;第一查找子单元,用于查找所述第一线程堆栈数据中是否包含等待互斥锁消息,所述等待互斥锁消息包含持有第一线程所等待互斥锁的第二线程;第一确定子单元,用于当第一线程堆栈数据不包含等待互斥锁消息时,确定第一线程持锁时间超过预设时间导致系统死锁;第二获取子单元,用于当第一线程堆栈数据存在等待互斥锁消息时,获取持有第一线...

【专利技术属性】
技术研发人员:李明浩袁军梁金祥闫昊
申请(专利权)人:小米科技有限责任公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1