CN112905372A - 线程的异常诊断方法及装置 - Google Patents

线程的异常诊断方法及装置 Download PDF

Info

Publication number
CN112905372A
CN112905372A CN202110144448.0A CN202110144448A CN112905372A CN 112905372 A CN112905372 A CN 112905372A CN 202110144448 A CN202110144448 A CN 202110144448A CN 112905372 A CN112905372 A CN 112905372A
Authority
CN
China
Prior art keywords
thread
target
determining
target thread
binary tree
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.)
Pending
Application number
CN202110144448.0A
Other languages
English (en)
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.)
Zhejiang Dahua Technology Co Ltd
Original Assignee
Zhejiang Dahua Technology Co Ltd
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 Zhejiang Dahua Technology Co Ltd filed Critical Zhejiang Dahua Technology Co Ltd
Priority to CN202110144448.0A priority Critical patent/CN112905372A/zh
Publication of CN112905372A publication Critical patent/CN112905372A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/079Root cause analysis, i.e. error or fault diagnosis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0766Error or fault reporting or storing
    • G06F11/0772Means for error signaling, e.g. using interrupts, exception flags, dedicated error registers

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • Biomedical Technology (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明提供了一种线程的异常诊断方法及装置,包括:通过检测线程控制目标线程的心跳计数器每隔预定时间执行加一操作;若在第一预定时间范围内心跳计数器的累加值大于或等于第一预设阈值,确定目标线程为异常线程;通过线程记录确定目标线程的异常类型。通过本发明,解决了线程异常诊断准确率低的问题。

Description

线程的异常诊断方法及装置
技术领域
本发明涉及通信领域,具体而言,涉及一种线程的异常诊断方法及装置。
背景技术
大型系统软件的可诊断功能直接决定产品的质量和开发。软件在实际出现线程死循环、死锁,如果没有及时诊断上报出来,会导致死循环、死锁的线程处理的业务不工作,甚至影响其他关联业务。针对死循环、死锁情况,操作系统是不会抛出异常的。
目前的线程异常诊断需要线程处理业务配合修改代码设置标记,需要有开发流程保证后续新增的消息线程处理消息前设置标记为“处理中”处理消息完后设置标记为“处理完毕”,如果有遗漏,新增的消息处理线程就得不到有效监控。或者只有等到线程进入僵尸状态才认为异常。不具体通用性,线程死锁的情况诊断不了。因此,现有线程异常诊断存在不易集成、维护,诊断不够全面、精确的问题。
针对相关技术中,线程异常诊断准确率低的问题,目前尚未存在有效的解决方案。
发明内容
本发明实施例提供了一种线程的异常诊断方法及装置,以至少解决相关技术中线程异常诊断准确率低的问题。
根据本发明的一个实施例,提供了一种线程的异常诊断方法,包括:通过检测线程控制目标线程的心跳计数器每隔预定时间执行加一操作;若在第一预定时间范围内所述心跳计数器的累加值大于或等于第一预设阈值,确定所述目标线程为异常线程;通过线程记录确定所述目标线程的异常类型。
可选地,通过线程记录确定所述目标线程的异常类型,包括:在所述线程记录中获取所述目标线程的CPU时钟中断次数;若在第二预定时间范围内,所述CPU时钟中断次数的增量大于或等于第二预设阈值,确定所述目标线程的异常类型为进入死循环。
可选地,通过线程记录确定所述目标线程的异常类型,包括:若所述目标线程的第一二叉树中存在申请目标锁的记录信息,并且其他线程的第二二叉树中存在持有所述目标锁的记录信息的情况下,确定所述目标线程的异常类型为死锁,其中,所述线程记录包括:所述第一二叉树和所述第二二叉树,所述第一二叉树用于保存申请锁的记录信息,所述第二二叉树用于保存持有锁的记录信息,每个线程具有所述第一二叉树和所述第二二叉树。
可选地,在通过线程记录确定所述目标线程的异常类型之后,所述方法还包括:通过所述检测线程向所述目标线程发送指示信息,以指示所述目标线程将所述目标线程的第一调用栈保存在全局变量中;通过所述全局变量获取所述目标线程的第一调用栈;对所述目标线程的第一调用栈进行记录。
可选地,所述方法还包括:在所述其他线程的所述第二二叉树中获取第二调用栈;通过所述第二调用栈确定正在持有且尚未释放所述目标锁的持有线程;对所述持有线程的所述第二调用栈进行记录。
可选地,所述方法还包括:在确定所述线程记录中没有所述目标线程的身份标识的情况下,释放所述目标线程的心跳计数器。
根据本发明的另一个实施例,提供了一种线程的异常诊断装置,包括:控制模块,用于通过检测线程控制目标线程的心跳计数器每隔预定时间执行加一操作;第一确定模块,用于若在第一预定时间范围内所述心跳计数器的累加值大于或等于第一预设阈值,确定所述目标线程为异常线程;第二确定模块,用于通过线程记录确定所述目标线程的异常类型。
可选地,所述第二确定模块,包括:获取单元,用于在所述线程记录中获取所述目标线程的CPU时钟中断次数;确定单元,用于若在第二预定时间范围内,所述CPU时钟中断次数的增量大于或等于第二预设阈值,确定所述目标线程的异常类型为进入死循环。
根据本发明的又一个实施例,还提供了一种存储介质,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
根据本发明的又一个实施例,还提供了一种电子装置,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上述任一项方法实施例中的步骤。
通过本发明,由于通过检测线程控制目标线程的心跳计数器每隔预定时间执行加一操作;若在第一预定时间范围内所述心跳计数器的累加值大于或等于第一预设阈值,确定目标线程为异常线程;通过线程记录确定所述目标线程的异常类型。因此,可以解决线程异常诊断准确率低问题,达到提高线程异常诊断准确率的效果。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是本发明实施例的一种线程的异常诊断方法的移动终端的硬件结构框图;
图2是根据本发明实施例的线程的异常诊断的流程图;
图3是根据本发明实施例的线程示意图;
图4是根据本发明实施例的线程异常精确定位时序图;
图5是根据本发明实施例的线程死锁精确定位的时序图;
图6是根据本发明实施例的线程的异常诊断装置的结构框图。
具体实施方式
下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
本申请实施例一所提供的方法实施例可以在移动终端、计算机终端或者类似的运算装置中执行。以运行在移动终端上为例,图1是本发明实施例的一种线程的异常诊断方法的移动终端的硬件结构框图。如图1所示,移动终端10可以包括一个或多个(图1中仅示出一个)处理器102(处理器102可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)和用于存储数据的存储器104,可选地,上述移动终端还可以包括用于通信功能的传输设备106以及输入输出设备108。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述移动终端的结构造成限定。例如,移动终端10还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。
存储器104可用于存储计算机程序,例如,应用软件的软件程序以及模块,如本发明实施例中的线程的异常诊断方法对应的计算机程序,处理器102通过运行存储在存储器104内的计算机程序,从而执行各种功能应用以及数据处理,即实现上述的方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至移动终端10。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
传输装置106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括移动终端10的通信供应商提供的无线网络。在一个实例中,传输装置106包括一个网络适配器(Network Interface Controller,简称为NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输装置106可以为射频(Radio Frequency,简称为RF)模块,其用于通过无线方式与互联网进行通讯。
在本实施例中提供了一种运行于上述移动终端的线程的异常诊断方法,图2是根据本发明实施例的线程的异常诊断的流程图,如图2所示,该流程包括如下步骤:
步骤S202,通过检测线程控制目标线程的心跳计数器每隔预定时间执行加一操作;
步骤S204,若在第一预定时间范围内所述心跳计数器的累加值大于或等于第一预设阈值,确定所述目标线程为异常线程;
步骤S206,通过线程记录确定所述目标线程的异常类型。
通过上述步骤,由于通过检测线程控制目标线程的心跳计数器每隔预定时间执行加一操作;若在第一预定时间范围内所述心跳计数器的累加值大于或等于第一预设阈值,确定目标线程为异常线程;通过线程记录确定所述目标线程的异常类型。因此,可以解决线程异常诊断准确率低问题,达到提高线程异常诊断准确率的效果。
可选地,上述步骤的执行主体可以为终端等,但不限于此。
作为一个可选的实施方式,目标线程可以是业务线程。大部分业务处理线程在一个周期内处理完业务后,会调用休眠函数释放中央处理器(Central Processing Unit,简称为CPU)资源,等到下一个周期再处理。数据收发线程会调用事件监听接口去监听连接套接字是否有数据上来。两个线程通常通过线程同步接口来做线程同步。这些函数在本实施例中可以定义为线程心跳发送函数。
在一套工程代码中有相同的函数实现时候,具体使用哪个函数实现依赖于链接的顺序,一般自定义库的链接优先级会高于第三方库,也可以在编译工程中显示指明先链接自定义库,这样保证相同的函数名,用的是自定义的函数。
通过在软件代码里重写心跳发送函数,具体步骤可以包括:
步骤S1,调用dlsym接口传入RTLD_NEXT参数获取真正重写函数的地址并保存下来;
步骤S2,清零该线程所属控制块的心跳计数器(如果线程刚起来,第一次清零心跳计数器,需要先申请该线程的对应的心跳计数器控制块),表明该线程是正常运行状态;
步骤S3,通过保存下来的函数地址调用真正的函数。
在上述步骤中,与原有的函数实现相比,重写的函数新增步骤S2心跳发送处理逻辑,通过步骤2让各个线程表明自身是正常的周期行的工作。
作为一个可选的实施方式,以sleep函数为例,重写的sleep代码逻辑如下:
Figure BDA0002930336770000061
Figure BDA0002930336770000071
作为一个可选的实施方式,对于正常工作的正常线程所属的心跳计数器会定时执行清零操作,也就是说,正常线程的心跳计数器的累加值并不会超过一定阈值。反之,没有进行周期性的计数器清零操作的线程为异常线程。如图3所示是根据本发明可选实施例的线程示意图,各个业务线程通过线程心跳发送处理逻辑表明自身是正常的周期性的工作,可以单独创建一个检测线程,该检测线程的处理逻辑足够简单,仅遍历各个业务线程的控制块,使各个业务线程的控制块的心跳计数器每隔预定时间加1,预定时间可以根据实际情况而定,例如每隔1s各个业务线程的心跳计数器执行加1操作。在本实施例中,在一定时间后,判断业务线程的心跳计数器的累加值是否大于或等于预设阈值,若大于预设阈值确定该线程没有进行周期性的计数器清零操作,判定线程异常,进入线程异常诊断逻辑。
作为一个可选的实施方式,通过上述步骤只能表明线程在超时阈值对应的时间内没有走到期望的心跳发送处理逻辑,可能有如下情况:线程死循环、线程死锁、线程已退出、线程正常(可能线程只是在通过信号量等待另外一个线程释放信号量来通知处理业务数据。另外一个线程一直没有收到数据,不需要处理数据)。在本实施例中,通过线程记录可以确定线程的异常类型。本实施例中,线程记录可以是线程路径,例如:“/proc/进程id/task/线程id/stat”、“/proc/进程id/task/线程id”,线程记录也可以是二叉树,例如:线程申请锁前记录锁的地址到该线程对应的二叉树A,以及申请锁成功后,将锁的地址作为键,调用栈作为值保存到线程对应的二叉树B,每个线程都有自己所属的二叉树A和二叉树B两种类型的二叉树。在本实施例中,通过线程记录即可确定线程的异常类型,可以达到提高线程异常诊断准确率的技术效果。
可选地,通过线程记录确定所述目标线程的异常类型,包括:在所述线程记录中获取所述目标线程的CPU时钟中断次数;若在第二预定时间范围内,所述CPU时钟中断次数的增量大于或等于第二预设阈值,确定所述目标线程的异常类型为进入死循环。
作为一个可选的实施方式,对于线程死循环的诊断可以通过读取“/proc/进程id/task/线程id/stat”文件获取CPU时钟中断次数,例如用户态和内核态运行时间的jiffies值,jiffies值用于表示CPU时钟中断次数。如果在较短的时间内示CPU时钟中断次数增量很大,认为线程还是在使用CPU的,但是在较长的阈值时间内没有走到期望的心跳发送处理逻辑,则认为线程进入死循环状态。具体地,可以通过设定预定时间范围,若在第二预定时间范围内,CPU时钟中断次数的增量大于或等于第二预设阈值,确定目标线程进入死循环,第二预定时间范围可以根据实际情况而定,例如可以是1秒、2秒、10秒等,第二预设阈值可以根据实际情况而定,例如可以是5次、10次等。在本实施例中,通过在线程记录确定CPU时钟中断次数可以诊断出异常线程是否为死循环,提高线程异常检测的准确率。
可选地,通过线程记录确定所述目标线程的异常类型,包括:若所述目标线程的第一二叉树中存在申请目标锁的记录信息,并且其他线程的第二二叉树中存在持有所述目标锁的记录信息的情况下,确定所述目标线程的异常类型为死锁,其中,所述线程记录包括:所述第一二叉树和所述第二二叉树,所述第一二叉树用于保存申请锁的记录信息,所述第二二叉树用于保存持有锁的记录信息,每个线程具有所述第一二叉树和所述第二二叉树。
作为一个可选的实施方式,每个线程均具有对应的两种类型的二叉树,二叉树A和二叉树B,二叉树A对应于第一二叉树,二叉树B对应于第二二叉树,二叉树A用于保存线程申请锁的记录信息,二叉树B用于保存线程持有锁的记录信息,例如,锁的记录信息可以是锁的地址。对于线程死锁诊断方法可以包括:通过重写锁的申请函数,在申请锁前,将锁的地址记录在该线程对应的二叉树A中,调用申请锁接口成功返回后,将锁从二叉树A中删除,这样二叉树A中保存就是线程正在申请锁的信息。假设业务线程T1在申请目标锁之前,将目标锁的地址记录到业务线程T1的二叉树A中,调用申请锁接口成功返回后将目标锁的地址从二叉树A中删除,二叉树A中保存了业务线程T1正在申请目标锁的信息。
业务申请锁成功后,将锁的地址作为键,调用栈作为值保存到线程对应的二叉树B中,重写锁释放函数,释放锁成功后,删除二叉树B中释放锁对应的节点。这样二叉树B中保存的是该线程已经持有锁的地址和对应的调用栈信息。假设业务线程T2成功申请目标锁,将目标锁的地址作为键,调用栈作为值保存到业务线程T2对应的二叉树B中,重写目标锁释放函数,释放目标锁成功后,删除二叉树B中释放目标锁锁对应的节点。二叉树B中保存的是业务线程T2已经持有目标锁的地址和对应的调用栈信息。
作为一个可选的实施方式,当业务线程检测到异常后,先确定此线程对应的二叉树A中是否有节点,如果有,说明线程在调用申请锁接口,但指定阈值时间内都申请不到,再遍历其他线程对应的二叉树B,如果这个节点对应的锁地址在其中,说明这个线程正在申请的锁被其他线程拿着,在指定周期阈值内没有释放,诊断线程进入死锁状态。假设检测到业务线程T1异常,检测与业务线程T1对应的二叉树A中是否有申请目标锁的节点,如果有,说明线程在调用申请目标锁的接口,但指定阈值时间内都申请不到,再遍历其他线程对应的二叉树B。如果这个节点对应的目标锁地址在二叉树B中,说明业务线程T1正在申请的锁被其他线程拿着,在指定周期阈值内没有释放。诊断线程进入死锁状态。
可选地,在通过线程记录确定所述目标线程的异常类型之后,所述方法还包括:通过所述检测线程向所述目标线程发送指示信息,以指示所述目标线程将所述目标线程的第一调用栈保存在全局变量中;通过所述全局变量获取所述目标线程的第一调用栈;对所述目标线程的第一调用栈进行记录。
作为一个可选的实施方式,如图4所示是根据本发明可选实施例的线程异常精确定位时序图,线程死循环和线程死锁的精确定位可以包括:通过检测线程通过发指示信息给异常线程,异常线程接收到指示信息后,调用信号处理函数获取异常线程的调用栈保存到全局变量中。异常线程通过信号量同步通知检测线程信息处理完毕。检测线程通过保存的全局变量D得知异常线程的调用栈,并记录日志。在本实施例中,通过全局变量获取异常线程的调用栈,可以对异常线程进行精确定位。
作为一个可选的实施方式,可以将线程死循环的超时阈值划分成多个等级,例如可以划分为如1分钟、2分钟、8分钟三个等级,每次计数器表示的累计没有发心跳的时间超过这个等级阈值,都会触发记录调用栈。可以结合这三个等级记录的调用栈,精确确认死循环时候的调用栈信息。三次记录的调用栈也能保证信息是可信的。
可选地,所述方法还包括:在所述其他线程的所述第二二叉树中获取第二调用栈;通过所述所述第二调用栈确定正在持有且尚未释放所述目标锁的持有线程;对所述持有线程的所述第二调用栈进行记录。
作为一个可选的实施方式,如图5所示是根据本发明可选实施例的线程死锁精确定位的时序图。对于死锁的诊断步骤,还包括通过死锁线程对应的二叉树A中的节点对应的目标锁,查找其他线程对应的二叉树B中目标锁的信息,并打印申请目标锁成功的时候调用栈。两个调用栈明确哪个调用者已经持有目标锁没释放,哪个调用者正在申请目标锁,并打印持有目标锁的持有线程的二叉树B中保存的锁申请时候的调用栈,从而精确定位死锁时候的信息。
可选地,所述方法还包括:在确定所述线程记录中没有所述目标线程的身份标识的情况下,释放所述目标线程的心跳计数器。
作为一个可选的实施方式,可以通过检查“/proc/进程id/task/线程id”这个目录确定目标线程是否存在。如果不存在,说明目标线程没有异常,只是线程退出掉了,释放掉目标线程对应的计数器控制块。
作为一个可选的实施方式,本申请能够精确识别死循环、死锁。死循环精确记录死循环时候的调用栈。死锁时候,既记录了已经持有锁的调用栈,也记录的正在申请锁触发异常的调用栈。能够根据这些调用栈信息精确定位异常线程。诊断可信度高。通过设置等级的超时阈值,条件满足即触发记录调用栈流程。可信度高。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
在本实施例中还提供了一种线程的异常诊断装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
图6是根据本发明实施例的线程的异常诊断装置的结构框图,如图6所示,该装置包括:控制模块62,用于通过检测线程控制目标线程的心跳计数器每隔预定时间执行加一操作;第一确定模块64,用于若在第一预定时间范围内所述心跳计数器的累加值大于或等于第一预设阈值,确定所述目标线程为异常线程;第二确定模块66,用于通过线程记录确定所述目标线程的异常类型。
可选地,所述第二确定模块,包括:获取单元,用于在所述线程记录中获取所述目标线程的CPU时钟中断次数;确定单元,用于若在第二预定时间范围内,所述CPU时钟中断次数的增量大于或等于第二预设阈值,确定所述目标线程的异常类型为进入死循环。
可选地,上述装置还用于通过如下方式实现通过线程记录确定所述目标线程的异常类型:若所述目标线程的第一二叉树中存在申请目标锁的记录信息,并且其他线程的第二二叉树中存在持有所述目标锁的记录信息的情况下,确定所述目标线程的异常类型为死锁,其中,所述线程记录包括:所述第一二叉树和所述第二二叉树,所述第一二叉树用于保存申请锁的记录信息,所述第二二叉树用于保存持有锁的记录信息,每个线程具有所述第一二叉树和所述第二二叉树。
可选地,上述装置还用于在通过线程记录确定所述目标线程的异常类型之后,通过所述检测线程向所述目标线程发送指示信息,以指示所述目标线程将所述目标线程的第一调用栈保存在全局变量中;通过所述全局变量获取所述目标线程的所述第一调用栈;对所述目标线程的所述第一调用栈进行记录。
可选地,上述装置还用于在所述其他线程的所述第二二叉树中获取第二调用栈;通过所述第二调用栈确定正在持有且尚未释放所述目标锁的持有线程;对所述持有线程的所述第二调用栈进行记录。
可选地,上述装置还用于在确定所述线程记录中没有所述目标线程的身份标识的情况下,释放所述目标线程的心跳计数器。
需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述各个模块以任意组合的形式分别位于不同的处理器中。
本发明的实施例还提供了一种存储介质,该存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
可选地,在本实施例中,上述存储介质可以被设置为存储用于执行以下步骤的计算机程序:
S1,通过检测线程控制目标线程的心跳计数器每隔预定时间执行加一操作;
S2,若在第一预定时间范围内所述心跳计数器的累加值大于或等于第一预设阈值,确定所述目标线程为异常线程;
S3,通过线程记录确定所述目标线程的异常类型。
可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(Read-Only Memory,简称为ROM)、随机存取存储器(Random Access Memory,简称为RAM)、移动硬盘、磁碟或者光盘等各种可以存储计算机程序的介质。
本发明的实施例还提供了一种电子装置,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。
可选地,上述电子装置还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。
可选地,在本实施例中,上述处理器可以被设置为通过计算机程序执行以下步骤:
S1,通过检测线程控制目标线程的心跳计数器每隔预定时间执行加一操作;
S2,若在第一预定时间范围内所述心跳计数器的累加值大于或等于第一预设阈值,确定所述目标线程为异常线程;
S3,通过线程记录确定所述目标线程的异常类型。
可选地,本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,本实施例在此不再赘述。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (10)

1.一种线程的异常诊断方法,其特征在于,包括:
通过检测线程控制目标线程的心跳计数器每隔预定时间执行加一操作;
若在第一预定时间范围内所述心跳计数器的累加值大于或等于第一预设阈值,确定所述目标线程为异常线程;
通过线程记录确定所述目标线程的异常类型。
2.根据权利要求1所述的方法,其特征在于,通过线程记录确定所述目标线程的异常类型,包括:
在所述线程记录中获取所述目标线程的CPU时钟中断次数;
若在第二预定时间范围内,所述CPU时钟中断次数的增量大于或等于第二预设阈值,确定所述目标线程的异常类型为进入死循环。
3.根据权利要求1所述的方法,其特征在于,通过线程记录确定所述目标线程的异常类型,包括:
若所述目标线程的第一二叉树中存在申请目标锁的记录信息,并且其他线程的第二二叉树中存在持有所述目标锁的记录信息的情况下,确定所述目标线程的异常类型为死锁,其中,所述线程记录包括:所述第一二叉树和所述第二二叉树,所述第一二叉树用于保存申请锁的记录信息,所述第二二叉树用于保存持有锁的记录信息,每个线程具有所述第一二叉树和所述第二二叉树。
4.根据权利要求2或3所述的方法,其特征在于,在通过线程记录确定所述目标线程的异常类型之后,所述方法还包括:
通过所述检测线程向所述目标线程发送指示信息,以指示所述目标线程将所述目标线程的第一调用栈保存在全局变量中;
通过所述全局变量获取所述目标线程的所述第一调用栈;
对所述目标线程的所述第一调用栈进行记录。
5.根据权利要求3所述的方法,其特征在于,所述方法还包括:
在所述其他线程的所述第二二叉树中获取第二调用栈;
通过所述第二调用栈确定正在持有且尚未释放所述目标锁的持有线程;
对所述持有线程的所述第二调用栈进行记录。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在确定所述线程记录中没有所述目标线程的身份标识的情况下,释放所述目标线程的心跳计数器。
7.一种线程的异常诊断装置,其特征在于,包括:
控制模块,用于通过检测线程控制目标线程的心跳计数器每隔预定时间执行加一操作;
第一确定模块,用于若在第一预定时间范围内所述心跳计数器的累加值大于或等于第一预设阈值,确定所述目标线程为异常线程;
第二确定模块,用于通过线程记录确定所述目标线程的异常类型。
8.根据权利要求7所述的装置,其特征在于,所述第二确定模块,包括:
获取单元,用于在所述线程记录中获取所述目标线程的CPU时钟中断次数;
确定单元,用于若在第二预定时间范围内,所述CPU时钟中断次数的增量大于或等于第二预设阈值,确定所述目标线程的异常类型为进入死循环。
9.一种存储介质,其特征在于,所述存储介质中存储有计算机程序,其中,所述程序可被终端设备或计算机运行时执行所述权利要求1至6任一项中所述的方法。
10.一种电子装置,包括存储器和处理器,其特征在于,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行所述权利要求1至6任一项中所述的方法。
CN202110144448.0A 2021-02-02 2021-02-02 线程的异常诊断方法及装置 Pending CN112905372A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110144448.0A CN112905372A (zh) 2021-02-02 2021-02-02 线程的异常诊断方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110144448.0A CN112905372A (zh) 2021-02-02 2021-02-02 线程的异常诊断方法及装置

Publications (1)

Publication Number Publication Date
CN112905372A true CN112905372A (zh) 2021-06-04

Family

ID=76121575

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110144448.0A Pending CN112905372A (zh) 2021-02-02 2021-02-02 线程的异常诊断方法及装置

Country Status (1)

Country Link
CN (1) CN112905372A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113703987A (zh) * 2021-09-14 2021-11-26 中国银行股份有限公司 Java任务死锁检测方法及装置

Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04319734A (ja) * 1991-02-22 1992-11-10 Internatl Business Mach Corp <Ibm> ロック管理装置
CN101853191A (zh) * 2010-06-23 2010-10-06 迈普通信技术股份有限公司 检测操作系统中任务死循环的方法及操作系统
CN102088470A (zh) * 2009-12-07 2011-06-08 中兴通讯股份有限公司 通信系统中文件传输协议死锁检测及自恢复的方法与装置
CN104102572A (zh) * 2013-04-01 2014-10-15 中兴通讯股份有限公司 一种系统故障检测及处理方法、装置
CN104320311A (zh) * 2014-11-20 2015-01-28 国电南京自动化股份有限公司 一种scada分布式平台下的心跳检测方法
CN106250316A (zh) * 2016-08-09 2016-12-21 东软集团股份有限公司 一种死循环检测方法及装置
CN109213684A (zh) * 2018-09-18 2019-01-15 北京工业大学 基于OpenMP线程心跳检测技术的程序检测方法及应用
CN109947636A (zh) * 2017-12-20 2019-06-28 浙江宇视科技有限公司 异常线程定位方法及装置
CN110457150A (zh) * 2019-07-10 2019-11-15 锐捷网络股份有限公司 一种内存故障检测方法及装置
CN110990142A (zh) * 2019-12-13 2020-04-10 上海智臻智能网络科技股份有限公司 并发任务处理方法、装置、计算机设备和存储介质
CN112069020A (zh) * 2020-08-13 2020-12-11 中国航空无线电电子研究所 基于嵌入式操作系统的机载航电设备软件故障监控系统

Patent Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04319734A (ja) * 1991-02-22 1992-11-10 Internatl Business Mach Corp <Ibm> ロック管理装置
CN102088470A (zh) * 2009-12-07 2011-06-08 中兴通讯股份有限公司 通信系统中文件传输协议死锁检测及自恢复的方法与装置
CN101853191A (zh) * 2010-06-23 2010-10-06 迈普通信技术股份有限公司 检测操作系统中任务死循环的方法及操作系统
CN104102572A (zh) * 2013-04-01 2014-10-15 中兴通讯股份有限公司 一种系统故障检测及处理方法、装置
CN104320311A (zh) * 2014-11-20 2015-01-28 国电南京自动化股份有限公司 一种scada分布式平台下的心跳检测方法
CN106250316A (zh) * 2016-08-09 2016-12-21 东软集团股份有限公司 一种死循环检测方法及装置
CN109947636A (zh) * 2017-12-20 2019-06-28 浙江宇视科技有限公司 异常线程定位方法及装置
CN109213684A (zh) * 2018-09-18 2019-01-15 北京工业大学 基于OpenMP线程心跳检测技术的程序检测方法及应用
CN110457150A (zh) * 2019-07-10 2019-11-15 锐捷网络股份有限公司 一种内存故障检测方法及装置
CN110990142A (zh) * 2019-12-13 2020-04-10 上海智臻智能网络科技股份有限公司 并发任务处理方法、装置、计算机设备和存储介质
CN112069020A (zh) * 2020-08-13 2020-12-11 中国航空无线电电子研究所 基于嵌入式操作系统的机载航电设备软件故障监控系统

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
戴庆,肖红,王辉,车燕娜,陈红丽编著: "《数据库综合大辞典》", 上海:上海科学技术文献出版社 , pages: 193 - 194 *
旧港94: "多线程常见面试题及答案", 《HTTPS://ZHUANLAN.ZHIHU.COM/P/75450837》, 27 July 2019 (2019-07-27), pages 1 - 12 *
田玉娟,赵国栋,张林福, 北京:中国商务出版社 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113703987A (zh) * 2021-09-14 2021-11-26 中国银行股份有限公司 Java任务死锁检测方法及装置
CN113703987B (zh) * 2021-09-14 2024-02-23 中国银行股份有限公司 Java任务死锁检测方法及装置

Similar Documents

Publication Publication Date Title
US7451446B2 (en) Task supervision
CN111324423B (zh) 容器内进程的监控方法、装置、存储介质和计算机设备
CN109460307B (zh) 基于日志埋点的微服务调用跟踪方法及其系统
CN111258850B (zh) 一种基于Linux系统的更新软件信息的方法及装置
CN114328102A (zh) 设备状态监控方法、装置、设备及计算机可读存储介质
US8074123B2 (en) Multi-CPU failure detection/recovery system and method for the same
CN113220535A (zh) 程序异常的处理方法、装置、设备及存储介质
CN110795264A (zh) 监控管理方法及系统、智能管理终端
US10474518B1 (en) Obtaining historical information in a device core dump
CN112905372A (zh) 线程的异常诊断方法及装置
CN112416708A (zh) 异步调用链路监控方法及系统
CN111736579B (zh) 基于日志问询留存的工业控制设备安全检测方法
US9990273B2 (en) Methods and systems for anomaly detection
CN116680055A (zh) 一种异步任务处理方法、装置、计算机设备及存储介质
CN111708670B (zh) 实时操作系统中任务时间参数的确定方法、装置及车辆
US10735246B2 (en) Monitoring an object to prevent an occurrence of an issue
CN112187527A (zh) 微服务的异常定位方法、装置、电子设备及可读存储介质
CN116881089B (zh) 一种用于调用链状态回传状态下埋点及埋点管理的方法
CN112699015B (zh) 日志输出方法、装置、服务器及计算机可读存储介质
JP2545856B2 (ja) メモリダンプ採取装置
CN117234787A (zh) 系统级芯片运行状态监控方法及系统
CN116662285A (zh) 服务器日志的存储方法和装置、存储介质及电子装置
CN115766532A (zh) 链路的监测方法、装置、存储介质及电子装置
KR20180035835A (ko) 확률적 프로세서 모니터링
CN115827260A (zh) 锁资源异常使用的检测方法及装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20210604