CN105740080B - 一种程序卡死检测方法及处理器 - Google Patents

一种程序卡死检测方法及处理器 Download PDF

Info

Publication number
CN105740080B
CN105740080B CN201610141339.2A CN201610141339A CN105740080B CN 105740080 B CN105740080 B CN 105740080B CN 201610141339 A CN201610141339 A CN 201610141339A CN 105740080 B CN105740080 B CN 105740080B
Authority
CN
China
Prior art keywords
key point
thread
processor
default
time
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201610141339.2A
Other languages
English (en)
Other versions
CN105740080A (zh
Inventor
徐佳宏
朱吕亮
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shenzhen Ipanel TV Inc
Original Assignee
Shenzhen Ipanel TV Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Shenzhen Ipanel TV Inc filed Critical Shenzhen Ipanel TV Inc
Priority to CN201610141339.2A priority Critical patent/CN105740080B/zh
Publication of CN105740080A publication Critical patent/CN105740080A/zh
Application granted granted Critical
Publication of CN105740080B publication Critical patent/CN105740080B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/524Deadlock detection or avoidance

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本申请提供了一种程序卡死检测方法及处理器,程序卡死检测方法包括:处理器每隔预设时间运行一次调试线程,在每次运行调试线程时,执行以下步骤:获取各个线程各自记录的关键点信息;计算最后一个关键点信息中线程运行到预设关键点的时间,与处理器的当前时间的差值,分别比较最后一个关键点信息中线程运行到预设关键点的时间,与处理器的当前时间的差值,与预设时间警告阈值的大小;在某一个线程记录的最后一个关键点信息中线程运行到预设关键点的时间,与处理器的当前时间的差值,大于所述预设时间警告阈值时,输出该线程记录的关键点信息。在本申请中,由处理器运行调试线程,实现了对程序卡死的检测。

Description

一种程序卡死检测方法及处理器
技术领域
本申请涉及计算机领域,特别涉及一种程序卡死检测方法及处理器。
背景技术
随着计算机技术的不断发展,处理器的性能越来越好,但是在处理器运行过程中仍不可避免的出现程序卡死的情况,程序卡死会给用户造成体验差以及损失,并且程序卡死若得不到及时解决会降低处理器的操作系统的可靠性。
可见,对程序卡死的具体原因的检测尤为重要,以使维护人员及时对出现导致程序卡死的程序进行改善,从而保证操作系统的可靠性。
发明内容
为解决上述技术问题,本申请实施例提供一种程序卡死检测方法及处理器,以达到实现对程序卡死的检测,使维护人员准确定位到异常的代码,及时对导致程序卡死的程序进行改善,从而提高操作系统的可靠性的目的,技术方案如下:
一种程序卡死检测方法,基于处理器,所述处理器的操作系统创建一个独立于其他线程的调试线程,所述方法包括:
所述处理器每隔预设时间运行一次所述调试线程,在每次运行所述调试线程时,执行以下步骤:
获取各个线程各自记录的关键点信息,所述关键点信息至少包括线程运行到预设关键点的时间和预设关键点的代码位置信息,所述预设关键点为可能导致所述操作系统死锁的程序语句;
计算各个线程各自记录的关键点信息中最后一个关键点信息中线程运行到预设关键点的时间,与所述处理器的当前时间的差值;
分别比较各个线程各自记录的关键点信息中最后一个关键点信息中线程运行到预设关键点的时间,与所述处理器的当前时间的差值,与预设时间警告阈值的大小;
在某一个线程记录的关键点信息中最后一个关键点信息中线程运行到预设关键点的时间,与所述处理器的当前时间的差值,大于所述预设时间警告阈值时,输出该线程记录的关键点信息,以在程序卡死时,根据输出的关键点信息中预设关键点的代码位置信息确定导致程序卡死的代码。
优选的,所述预设关键点的代码位置信息包括:预设关键点所在函数、预设关键点所在的文件名、预设关键点所在的行号、预设关键点所在函数被调用的函数、预设关键点所在函数被调用的文件名和预设关键点所在函数被调用的行号。
优选的,所述预设关键点还包括:被频繁调用的接口。
优选的,所述预设关键点还包括:除所述操作系统包括的接口之外的第三方接口。
一种处理器,所述处理器的操作系统创建一个独立于其他线程的调试线程;
所述处理器,用于每隔预设时间运行一次所述调试线程,在每次运行所述调试线程时,执行以下步骤:
获取各个线程各自记录的关键点信息,所述关键点信息至少包括线程运行到预设关键点的时间和预设关键点的代码位置信息,所述预设关键点为可能导致所述操作系统死锁的程序语句;
计算各个线程各自记录的关键点信息中最后一个关键点信息中线程运行到预设关键点的时间,与所述处理器的当前时间的差值;
分别比较各个线程各自记录的关键点信息中最后一个关键点信息中线程运行到预设关键点的时间,与所述处理器的当前时间的差值,与预设时间警告阈值的大小;
在某一个线程记录的关键点信息中最后一个关键点信息中线程运行到预设关键点的时间,与所述处理器的当前时间的差值,大于所述预设时间警告阈值时,输出该线程记录的关键点信息,以在程序卡死时,根据输出的关键点信息中预设关键点的代码位置信息确定导致程序卡死的代码。
与现有技术相比,本申请的有益效果为:
在本申请中,处理器的操作系统通过创建一个独立于其他线程的调试线程,由处理器每隔预设时间运行一次调试线程,来实现对程序卡死的检测。
具体的,由于处于正常运行状态的线程会不断占用处理器运行,不断分占处理器的时间,因此处于正常运行状态的线程的线程运行到预设关键点的时间在不断更新且与处理器的当前时间接近,但是若线程出现异常,则出现异常的线程不会占用处理器运行,从而不会分占处理器的时间,出现异常的线程的线程运行到预设关键点的时间将不再更新,因此本申请通过运行调试线程,各个线程各自记录的关键点信息中最后一个关键点信息中线程运行到预设关键点的时间,与所述处理器的当前时间的差值,与预设时间警告阈值的大小,在某一个线程记录的关键点信息中最后一个关键点信息中线程运行到预设关键点的时间,与所述处理器的当前时间的差值,大于预设时间警告阈值时,说明该线程的线程运行到预设关键点的时间已不再更新,说明该线程出现异常,输出该线程记录的关键点信息,以在程序卡死时,根据输出的关键点信息中预设关键点的代码位置信息确定导致程序卡死的代码,实现程序卡死检测,使维护人员准确定位到异常的代码,及时对导致程序卡死的程序进行改善,从而提高操作系统的可靠性,并改善了用户体验性。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本申请提供的一种程序卡死检测方法的一种流程图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
实施例一
在本实施例中,提供了一种程序卡死检测方法基于处理器,其中,处理器的操作系统首先创建一个独立于其他线程的调试线程。
在本实施例中,处理器每隔预设时间运行一次所述调试线程。其中,在每次运行所述调试线程时,执行的过程请参见图1,具体步骤如下:
步骤S11:获取各个线程各自记录的关键点信息。
在本实施例中,关键点信息至少包括线程运行到预设关键点的时间和预设关键点的代码位置信息,预设关键点为可能导致操作系统死锁的程序语句。
在本实施例中,获取各个线程各自记录的关键点信息具体可以为获取各个线程各自记录的所有关键点信息。当然,为了节省存储空间,获取各个线程各自记录的关键点信息具体也可以为:获取各个线程各自记录的所有关键点信息中的最后若干个关键点信息。
在本实施例中,获取各个预设关键点各自的关键点信息的实现依赖于处理器的操作系统增加的调试模块。调试模块对外提供预设关键点获取接口,每个预设关键点前后均增加预设关键点获取接口。在预设关键点前后增加预设关键点获取接口后,线程在运行预设关键点时,会调用预设关键点获取接口,记录关键点信息,并发送给调试模块。调试模块可以保存各个线程各自记录的所有关键点信息,也可以仅保存各个线程各自记录的关键点信息中的最后若干个关键点信息,以节省存储空间。处理器可以从调试模块获取各个线程记录的关键点信息。
步骤S12:计算各个线程各自记录的关键点信息中最后一个关键点信息中线程运行到预设关键点的时间,与所述处理器的当前时间的差值。
步骤S13:分别比较各个线程各自记录的关键点信息中最后一个关键点信息中线程运行到预设关键点的时间,与所述处理器的当前时间的差值,与预设时间警告阈值的大小。
步骤S14:在某一个线程记录的关键点信息中最后一个关键点信息中线程运行到预设关键点的时间,与所述处理器的当前时间的差值,大于所述预设时间警告阈值时,输出该线程记录的关键点信息,以在程序卡死时,根据输出的关键点信息中预设关键点的代码位置信息确定导致程序卡死的代码。
根据输出的关键点信息中预设关键点的代码位置信息,可以定位到出现异常的代码的具体位置,方便维护人员进行问题的处理。
在本实施例中,程序卡死具体为线程死锁时,可以通过执行步骤S11至步骤S14,实现对线程死锁的检测,在线程死锁时,根据输出的关键点信息中预设关键点的代码位置信息确定导致线程死锁的代码。
在本申请中,处理器的操作系统通过创建一个独立于其他线程的调试线程,由处理器每隔预设时间运行一次调试线程,来实现对程序卡死的检测。
具体的,由于处于正常运行状态的线程会不断占用处理器运行,不断分占处理器的时间,因此处于正常运行状态的线程的线程运行到预设关键点的时间在不断更新且与处理器的当前时间接近,但是若线程出现异常,则出现异常的线程不会占用处理器运行,从而不会分占处理器的时间,出现异常的线程的线程运行到预设关键点的时间将不再更新,因此本申请通过运行调试线程,各个线程各自记录的关键点信息中最后一个关键点信息中线程运行到预设关键点的时间,与所述处理器的当前时间的差值,与预设时间警告阈值的大小,在某一个线程记录的关键点信息中最后一个关键点信息中线程运行到预设关键点的时间,与所述处理器的当前时间的差值,大于预设时间警告阈值时,说明该线程的线程运行到预设关键点的时间已不再更新,说明该线程出现异常,输出该线程记录的关键点信息,以在程序卡死时,根据输出的关键点信息中预设关键点的代码位置信息确定导致程序卡死的代码,实现程序卡死检测,使维护人员准确定位到异常的代码,及时对导致程序卡死的程序进行改善,从而提高操作系统的可靠性,并改善了用户体验性。
在本实施例中,预设关键点的代码位置信息具体可以包括:预设关键点所在函数、预设关键点所在的文件名、预设关键点所在的行号、预设关键点所在函数被调用的函数、预设关键点所在函数被调用的文件名和预设关键点所在函数被调用的行号。
在本实施例中,预设关键点还可以为被频繁调用的接口或除处理器的操作系统包括的接口之外的第三方接口。
其中,被频谱调用的接口(如:内存分配与释放接口、获取系统时间的接口、打印接口等)由于调用频繁,可能会出现纯粹的代码错误,而纯粹的代码错误可能导致程序陷入死循环,从而导致程序卡死,因此有必要将被频繁调用的接口作为预设关键点,实现对被频繁调用的接口的检测。
除处理器的操作系统包括的接口之外的第三方接口由于是由第三方开发,可靠性差,且第三方接口由于实现不当,会出现接口不返回的情况,导致程序卡死,因此有必要将除处理器的操作系统包括的接口之外的第三方接口作为预设关键点,实现对除处理器的操作系统包括的接口之外的第三方接口的检测。
在上述程序卡死检测方法中,预设时间警告阈值可以但不局限于设置为6秒。
实施例二
在本实施例中,与上述方法实施例相对应,提供了一种处理器。
在本实施例中,处理器的操作系统首先创建一个独立于其他线程的调试线程。
在创建完独立于其他线程的调试线程之后,所述处理器,用于每隔预设时间运行一次所述调试线程,在每次运行所述调试线程时,执行以下步骤:
获取各个线程各自记录的关键点信息,所述关键点信息至少包括线程运行到预设关键点的时间和预设关键点的代码位置信息,所述预设关键点为可能导致所述操作系统死锁的程序语句;
计算各个线程各自记录的关键点信息中最后一个关键点信息中线程运行到预设关键点的时间,与所述处理器的当前时间的差值;
分别比较各个线程各自记录的关键点信息中最后一个关键点信息中线程运行到预设关键点的时间,与所述处理器的当前时间的差值,与预设时间警告阈值的大小;
在某一个线程记录的关键点信息中最后一个关键点信息中线程运行到预设关键点的时间,与所述处理器的当前时间的差值,大于所述预设时间警告阈值时,输出该线程记录的关键点信息,以在程序卡死时,根据输出的关键点信息中预设关键点的代码位置信息确定导致程序卡死的代码。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上对本申请所提供的一种程序卡死检测方法及处理器进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

Claims (5)

1.一种程序卡死检测方法,其特征在于,基于处理器,所述处理器的操作系统创建一个独立于其他线程的调试线程,所述方法包括:
所述处理器每隔预设时间运行一次所述调试线程,在每次运行所述调试线程时,执行以下步骤:
获取各个线程各自记录的所有关键点信息中的最后若干个关键点信息,所述关键点信息至少包括线程运行到预设关键点的时间和预设关键点的代码位置信息,所述预设关键点为可能导致所述操作系统死锁的程序语句;
计算各个线程各自记录的所有关键点信息中最后若干个关键点信息中最后一个关键点信息中线程运行到预设关键点的时间,与所述处理器的当前时间的差值;
分别比较各个线程各自记录的所有关键点信息中最后若干个关键点信息中最后一个关键点信息中线程运行到预设关键点的时间,与所述处理器的当前时间的差值,与预设时间警告阈值的大小;
在某一个线程记录的所有关键点信息中最后若干个关键点信息中最后一个关键点信息中线程运行到预设关键点的时间,与所述处理器的当前时间的差值,大于所述预设时间警告阈值时,输出该线程记录的关键点信息,以在程序卡死时,根据输出的关键点信息中预设关键点的代码位置信息确定导致程序卡死的代码。
2.根据权利要求1所述的方法,其特征在于,所述预设关键点的代码位置信息包括:预设关键点所在函数、预设关键点所在的文件名、预设关键点所在的行号、预设关键点所在函数被调用的函数、预设关键点所在函数被调用的文件名和预设关键点所在函数被调用的行号。
3.根据权利要求1所述的方法,其特征在于,所述预设关键点还包括:被频繁调用的接口。
4.根据权利要求1所述的方法,其特征在于,所述预设关键点还包括:除所述操作系统包括的接口之外的第三方接口。
5.一种处理器,其特征在于,所述处理器的操作系统创建一个独立于其他线程的调试线程;
所述处理器,用于每隔预设时间运行一次所述调试线程,在每次运行所述调试线程时,执行以下步骤:
获取各个线程各自记录的所有关键点信息中的最后若干个关键点信息,所述关键点信息至少包括线程运行到预设关键点的时间和预设关键点的代码位置信息,所述预设关键点为可能导致所述操作系统死锁的程序语句;
计算各个线程各自记录的所有关键点信息中最后若干个关键点信息中最后一个关键点信息中线程运行到预设关键点的时间,与所述处理器的当前时间的差值;
分别比较各个线程各自记录的所有关键点信息中最后若干个关键点信息中最后一个关键点信息中线程运行到预设关键点的时间,与所述处理器的当前时间的差值,与预设时间警告阈值的大小;
在某一个线程记录的所有关键点信息中最后若干个关键点信息中最后一个关键点信息中线程运行到预设关键点的时间,与所述处理器的当前时间的差值,大于所述预设时间警告阈值时,输出该线程记录的关键点信息,以在程序卡死时,根据输出的关键点信息中预设关键点的代码位置信息确定导致程序卡死的代码。
CN201610141339.2A 2016-03-11 2016-03-11 一种程序卡死检测方法及处理器 Active CN105740080B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610141339.2A CN105740080B (zh) 2016-03-11 2016-03-11 一种程序卡死检测方法及处理器

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610141339.2A CN105740080B (zh) 2016-03-11 2016-03-11 一种程序卡死检测方法及处理器

Publications (2)

Publication Number Publication Date
CN105740080A CN105740080A (zh) 2016-07-06
CN105740080B true CN105740080B (zh) 2019-02-22

Family

ID=56251675

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610141339.2A Active CN105740080B (zh) 2016-03-11 2016-03-11 一种程序卡死检测方法及处理器

Country Status (1)

Country Link
CN (1) CN105740080B (zh)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106201730A (zh) * 2016-07-07 2016-12-07 浪潮(北京)电子信息产业有限公司 一种linux用户态互斥锁死锁检测方法及系统
CN106201731A (zh) * 2016-07-07 2016-12-07 浪潮(北京)电子信息产业有限公司 一种用户态读写锁死锁检测方法及系统
CN108021496B (zh) 2016-10-28 2020-09-04 腾讯科技(深圳)有限公司 线程数据处理方法及装置
CN107247630A (zh) * 2017-06-05 2017-10-13 努比亚技术有限公司 线程检测方法、终端及计算机可读存储介质
CN107450990A (zh) * 2017-07-18 2017-12-08 浙江大华技术股份有限公司 一种基于raii的死锁检测方法及装置
CN107688517B (zh) * 2017-08-30 2021-01-22 广州视源电子科技股份有限公司 Wpf程序卡顿检测方法和装置
CN109445951B (zh) * 2018-10-31 2020-09-25 新华三技术有限公司 一种信息处理方法及装置

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103092746A (zh) * 2013-02-05 2013-05-08 上海大唐移动通信设备有限公司 线程异常的定位方法及系统
CN103164332A (zh) * 2011-12-15 2013-06-19 迈普通信技术股份有限公司 死循环任务的检测及处理方法
CN103810099A (zh) * 2013-11-21 2014-05-21 北京奇虎科技有限公司 代码跟踪方法及其系统
CN104636259A (zh) * 2015-03-18 2015-05-20 厦门雅迅网络股份有限公司 一种基于运行期动态跟踪的函数执行超时与死锁检测方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8578218B2 (en) * 2009-04-04 2013-11-05 Oracle International Corporation Method and system for implementing a scalable, high-performance, fault-tolerant locking mechanism in a multi-process environment

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103164332A (zh) * 2011-12-15 2013-06-19 迈普通信技术股份有限公司 死循环任务的检测及处理方法
CN103092746A (zh) * 2013-02-05 2013-05-08 上海大唐移动通信设备有限公司 线程异常的定位方法及系统
CN103810099A (zh) * 2013-11-21 2014-05-21 北京奇虎科技有限公司 代码跟踪方法及其系统
CN104636259A (zh) * 2015-03-18 2015-05-20 厦门雅迅网络股份有限公司 一种基于运行期动态跟踪的函数执行超时与死锁检测方法

Also Published As

Publication number Publication date
CN105740080A (zh) 2016-07-06

Similar Documents

Publication Publication Date Title
CN105740080B (zh) 一种程序卡死检测方法及处理器
US11360842B2 (en) Fault processing method, related apparatus, and computer
US10795753B2 (en) Log-based computer failure diagnosis
CN109039740B (zh) 一种处理运维监控告警的方法及设备
CN104412232B (zh) 事务处理方法、系统、介质
CN110928718A (zh) 一种基于关联分析的异常处理方法、系统、终端及介质
CN104350468B (zh) 非事务储存指令
CN105512027B (zh) 进程状态监控方法和装置
CN104335186B (zh) 处理器辅助设施
CN104335177B (zh) 有选择地控制事务处理中的指令执行
CN104335181B (zh) 事务诊断区块
Fu et al. Digging deeper into cluster system logs for failure prediction and root cause diagnosis
CN112015599B (zh) 错误恢复的方法和装置
US9342390B2 (en) Cluster management in a shared nothing cluster
CN102231161A (zh) 数据库同步验证及监控方法
US9436539B2 (en) Synchronized debug information generation
CN109299064B (zh) 数据库监控方法及终端设备
NZ757969A (en) Quantifying robustness by analyzing a property graph data model
CN106897197A (zh) 错误日志的去重方法及装置
CN104077220A (zh) Mips架构操作系统内核的调试方法和装置
CN103064988A (zh) 一种异常数据的检测方法及装置
CN112306700A (zh) 一种异常rpc请求的诊断方法和装置
CN106445787B (zh) 一种监控服务器核心转储文件的方法、装置及电子设备
CN110162440A (zh) 故障定位的方法、电子装置及计算机可读存储介质
CN106294132B (zh) 一种管理日志的方法及装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant