CN111159051B - 死锁检测方法、装置、电子设备及可读存储介质 - Google Patents
死锁检测方法、装置、电子设备及可读存储介质 Download PDFInfo
- Publication number
- CN111159051B CN111159051B CN201911423212.XA CN201911423212A CN111159051B CN 111159051 B CN111159051 B CN 111159051B CN 201911423212 A CN201911423212 A CN 201911423212A CN 111159051 B CN111159051 B CN 111159051B
- Authority
- CN
- China
- Prior art keywords
- stack
- detected
- stack information
- deadlock
- entity
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3608—Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/524—Deadlock detection or avoidance
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请提供一种死锁检测方法、装置、电子设备及可读存储介质,涉及计算机技术领域。该方法包括:获取在每个时刻采集的待检测程序运行实体对应的堆栈信息,共获得多个堆栈信息;基于所述多个堆栈信息确定所述待检测程序运行实体是否出现死锁。该方案中通过获取待检测程序运行实体的多个堆栈信息,对多个堆栈信息进行分析以确定待检测程序运行实体是否出现死锁,容易实现,并且由于堆栈信息采用堆栈结构进行存储,使得可以很直观地对堆栈信息进行分析定位,从而可准确分析出待检测程序运行实体是否出现死锁。
Description
技术领域
本申请涉及计算机技术领域,具体而言,涉及一种死锁检测方法、装置、电子设备及可读存储介质。
背景技术
死锁是并发系统中比较常见的软件设计缺陷,也是非常典型的姐姐并发安全所需关注的问题,死锁的发生会导致程序无限等待或资源严重消耗,使整个系统没有可用资源来陷入瘫痪,严重影响系统安全性和可靠性。
一般针对死锁检测的方法为静态检测,其是通过工具来分析待检测程序的源代码来找出可能要发生死锁的程序位置,这种方法不适用于检测代码量大的程序,而且由于分析的源代码太多,可能导致死锁定位不准确,死锁检测结果不准确。
发明内容
本申请实施例的目的在于提供一种死锁检测方法、装置、电子设备及可读存储介质,用以改善现有技术中死锁检测过程复杂,且检测结果不准确的问题。
第一方面,本申请实施例提供了一种死锁检测方法,所述方法包括:获取在每个时刻采集的待检测程序运行实体对应的堆栈信息,共获得多个堆栈信息;基于所述多个堆栈信息确定所述待检测程序运行实体是否出现死锁。
在上述实现过程中,通过获取待检测程序运行实体的多个堆栈信息,对多个堆栈信息进行分析以确定待检测程序运行实体是否出现死锁,容易实现,并且由于堆栈信息采用堆栈结构进行存储,使得可以很直观地对堆栈信息进行分析定位,从而可准确分析出待检测程序运行实体是否出现死锁。
可选地,每个堆栈信息包括在对应时刻采集每个堆栈信息时压入堆栈中的函数,所述基于所述多个堆栈信息确定所述待检测程序运行实体是否出现死锁,包括:
根据每个堆栈信息,从所述堆栈的栈顶向栈底方向逐层遍历压入所述堆栈中的函数;
若已遍历层数大于或等于预设层数时,则确定所述待检测程序运行实体未出现死锁。
在上述实现过程中,在已遍历层数大于或等于预设层数时,表明此时待检测程序运行实体为正常运行,其没有出现死锁的情况。
可选地,每个堆栈信息包括在对应时刻采集每个堆栈信息时压入堆栈中的函数,所述基于所述多个堆栈信息确定所述待检测程序运行实体是否出现死锁,包括:
根据每个堆栈信息,从所述堆栈的栈顶向栈底方向逐层遍历压入所述堆栈中的函数;
当所述堆栈的目标层中压入的函数在所述多个堆栈信息中相同时,则确定所述待检测程序运行实体出现死锁。
在上述实现过程中,若在多个堆栈信息中检测到堆栈中的目标层的函数相同时,表明该待检测程序运行实体可能一直在循环执行该函数,进而可确定该待检测程序运行实体出现死锁,如此可对待检测程序运行实体的死锁状态进行准确检测。
可选地,所述目标层在所述堆栈中所在的层数为小于预设层数,如此可避免待检测程序运行实体在堆栈的栈顶的第一层就出现相同的函数可能造成误判的情况。
可选地,所述确定所述待检测程序运行实体出现死锁之后,还包括:
确定所述待检测程序运行实体出现死锁的原因为所述目标层中压入的函数出现死锁,以及所述目标层中压入的函数对应的数据结构出现死锁。
在上述实现过程中,可基于多个堆栈信息,分析出待检测程序运行实体出现死锁的函数或数据结构,如此可针对出现死锁的函数或数据结构采取针对性补救性措施,以及时确保待检测程序运行实体可以正常运行。
可选地,所述确定所述待检测程序运行实体出现死锁之后,还包括:
重新启动所述待检测程序运行实体。
在上述实现过程中,在确定待检测程序运行实体出现死锁后,可重新启动待检测程序运行实体,从而可使得待检测程序运行实体能够尽早恢复正常运行状态。
可选地,所述获取在每个时刻采集的待检测程序运行实体对应的堆栈信息,共获得多个堆栈信息,包括:
将每个时刻采集的所述待检测程序运行实体对应的堆栈信息存入对应的数组的对应元素中,其中,所述数组中的每个元素用于存储一个时刻采集的所述待检测程序运行实体对应的堆栈信息;
在所述数组中有预设数量的元素存储有所述待检测程序运行实体对应的堆栈信息时,获取所述数组中预设数量的元素中存储的多个堆栈信息。
在上述实现过程中,通过将堆栈信息存入对应的数组中,以便于对堆栈信息的存储以及便于获取对应时刻的堆栈信息进行分析。
可选地,所述待检测程序运行实体为电子设备上运行的进程或线程。
第二方面,本申请实施例提供了一种死锁检测装置,所述装置包括:
堆栈信息获取模块,用于获取在每个时刻采集的待检测程序运行实体对应的堆栈信息,共获得多个堆栈信息;
死锁检测模块,用于基于所述多个堆栈信息确定所述待检测程序运行实体是否出现死锁。
可选地,每个堆栈信息包括在对应时刻采集每个堆栈信息时压入堆栈中的函数,所述死锁检测模块,用于根据每个堆栈信息,从所述堆栈的栈顶向栈底方向逐层遍历压入所述堆栈中的函数;若已遍历层数大于或等于预设层数时,则确定所述待检测程序运行实体未出现死锁。
可选地,每个堆栈信息包括在对应时刻采集每个堆栈信息时压入堆栈中的函数,所述死锁检测模块,用于根据每个堆栈信息,从所述堆栈的栈顶向栈底方向逐层遍历压入所述堆栈中的函数;当所述堆栈的目标层中压入的函数在所述多个堆栈信息中相同时,则确定所述待检测程序运行实体出现死锁。
可选地,所述目标层在所述堆栈中所在的层数为小于预设层数。
可选地,所述装置还包括:
死锁原因确定模块,用于确定所述待检测程序运行实体出现死锁的原因为所述目标层中压入的函数出现死锁,以及所述目标层中压入的函数对应的数据结构出现死锁。
可选地,所述装置还包括:
重启模块,用于重新启动所述待检测程序运行实体。
可选地,所述堆栈信息获取模块,用于将每个时刻采集的所述待检测程序运行实体对应的堆栈信息存入对应的数组的对应元素中,其中,所述数组中的每个元素用于存储一个时刻采集的所述待检测程序运行实体对应的堆栈信息;在所述数组中有预设数量的元素存储有所述待检测程序运行实体对应的堆栈信息时,获取所述数组中预设数量的元素中存储的多个堆栈信息。
可选地,所述待检测程序运行实体为电子设备上运行的进程或线程。
第三方面,本申请实施例提供一种电子设备,包括处理器以及存储器,所述存储器存储有计算机可读取指令,当所述计算机可读取指令由所述处理器执行时,运行如上述第一方面提供的所述方法中的步骤。
第四方面,本申请实施例提供一种可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时运行如上述第一方面提供的所述方法中的步骤。
本申请的其他特征和优点将在随后的说明书阐述,并且,部分地从说明书中变得显而易见,或者通过实施本申请实施例了解。本申请的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本申请实施例提供的一种执行死锁检测方法的电子设备的结构示意图;
图2为本申请实施例提供的一种死锁检测方法的流程图;
图3为本申请实施例提供的一种进程在运行过程中压入堆栈中的函数的示意图;
图4为本申请实施例提供的一种各个堆栈信息的示意图;
图5为本申请实施例提供的一种进程未出现死锁时的堆栈信息的示意图;
图6为本申请实施例提供的一种进程出现死锁时的堆栈信息的示意图;
图7为本申请实施例提供的一种死锁检测装置的结构框。
具体实施方式
下面将结合本申请实施例中附图,对本申请实施例中的技术方案进行清楚、完整地描述。
本申请实施例提供一种死锁检测方法,该方法通过对待检测程序运行实体的堆栈信息进行监测,由于堆栈信息采用堆栈结构进行存储,使得可以很直观地对堆栈信息进行分析定位,从而可准确分析出待检测程序运行实体是否出现死锁。
请参照图1,图1为本申请实施例提供的执行死锁检测方法的电子设备的结构示意图,所述电子设备可以包括:至少一个处理器110,例如CPU,至少一个通信接口120,至少一个存储器130和至少一个通信总线140。其中,通信总线140用于实现这些组件直接的连接通信。其中,本申请实施例中设备的通信接口120用于与其他节点设备进行信令或数据的通信。存储器130可以是高速RAM存储器,也可以是非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。存储器130可选的还可以是至少一个位于远离前述处理器的存储装置。存储器130中存储有计算机可读取指令,当所述计算机可读取指令由所述处理器110执行时,电子设备执行下述图2所示方法过程,例如,存储器130可用于存储各个待检测程序运行实体对应的多个堆栈信息,处理器110可对待检测程序运行实体的运行情况进行监测,可从存储器130中获取多个堆栈信息,对多个堆栈信息进行分析,进而可检测出待检测运行实体是否出现死锁。
可以理解,图1所示的结构仅为示意,所述电子设备还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。图1中所示的各组件可以采用硬件、软件或其组合实现。
请参照图2,图2为本申请实施例提供的一种死锁检测方法的流程图,该方法包括如下步骤:
步骤S110:获取在每个时刻采集的待检测程序运行实体对应的堆栈信息,共获得多个堆栈信息。
其中,待检测程序运行实体可以是指电子设备是上运行的进程或线程,在电子设备进入启动状态后,可对电子设备中运行的多个进程或线程进行监控,以检测其是否出现死锁,进而可及时发现出现死锁的进程或线程后可及时采取措施确保进程或线程的正常运行。为了描述的方便,下述针对待检测程序运行实体的相关描述均以进程为例进行描述。
本申请实施例中可对电子设备中运行的多个进程均进行监控,而针对每个进程均可获取该进程在多个时刻的堆栈信息,然后对这多个堆栈信息进行分析进而判断进程是否出现死锁,为了描述的简洁,本申请实施例中以对一个进程进行死锁检测为例进行说明。
每个进程的相关信息均可以存储在该进程对应的堆栈中,进程对应的堆栈信息即为堆栈中存储的信息,例如,这些信息可以是进程在运行过程中调用的函数信息。随着进程的运行,其函数调用可能在不断发生着变化,所以可以周期性获取进程的堆栈信息,如每隔2秒采集进程的堆栈信息,如此在一定时间后可采集获得进程的多个堆栈信息。
步骤S120:基于所述多个堆栈信息确定所述待检测程序运行实体是否出现死锁。
由于堆栈信息中记录着进行运行过程中的相关信息,这些信息可以表征进程的运行状态,所以可以对这些堆栈信息进行分析,从而可判断进程是否出现死锁,例如,在后几个时刻获取的堆栈信息均与前一个时刻获取的堆栈信息相同,此时可表明进程处于循环状态,如此可确定该进程出现了死锁。
所以,可针对每个进程均按照该方式进行分析,从而可检测出电子设备中出现死锁的进程,进而可对这些进程进行死锁监控,以及时发现进程出现死锁后导致进程进入异常运行状态。
在上述实现过程中,通过获取待检测程序运行实体的多个堆栈信息,对多个堆栈信息进行分析以确定待检测程序运行实体是否出现死锁,容易实现,并且由于堆栈信息采用堆栈结构进行存储,使得可以很直观地对堆栈信息进行分析定位,从而可准确分析出待检测程序运行实体是否出现死锁。
为了便于获取进程的多个堆栈信息,还可以将每个时刻采集的待检测程序运行实体对应的堆栈信息存入对应的数组的对应元素中,其中,数组中的每个元素用于存储一个时刻采集的待检测程序运行实体对应的堆栈信息,在数组中有预设数量的元素存储有待检测程序运行实体对应的堆栈信息时,获取数组中预设数量的元素中存储的多个堆栈信息。
可以理解地,可以为每个进程均创建一个对应的数组,如数组可以表示为dump[0][0],dump[0][1],……,dump[n-1][k-1],其中,k表示k个时刻,如将第一时刻采集的堆栈信息存入数组中的dump[0][0]元素中,将第k个时刻采集的堆栈信息存入数组中的dump[n-1][k-1]元素中,如此可将各个时刻采集的堆栈信息存入数组的对应元素中。
在进程启动时,可以先将数组置为空,然后按照各个时刻采集的堆栈信息将堆栈信息依次记录到数组的各个元素中。在记录的堆栈信息的次数达到k时,获取这数组中的k个堆栈信息,即预设数量为k,在有k个元素存储有堆栈信息时,获取k个堆栈信息。
然后对获取的这k个堆栈信息进行分析,从而确定进程是否出现死锁。可以理解地,其中,k的取值可以根据实际情况进行设置,如其取值范围可以为1-100中的任意整数。
在上述实现过程中,通过将堆栈信息存入对应的数组中,以便于对堆栈信息的存储以及便于获取对应时刻的堆栈信息进行分析。
为了对进程的死锁状态进行更准确地检测,作为一种实施方式,每个堆栈信息包括在对应时刻采集每个堆栈信息时压入堆栈中的函数,如此,可根据每个堆栈信息,从堆栈的栈顶向栈底方向逐层遍历压入堆栈中的函数,若已遍历层数大于或等于预设层数时,则确定待检测程序运行实体未出现死锁。
其中,堆栈是一种内存中的数据结构,增长方向为从栈底向栈顶方向,若一个进程中要执行f1,f2,f3三个函数,且f1执行过程中调用f2,f2执行的过程中调用f3,那么进程在执行f1时,堆栈中压入的函数为f1,在f2被调用后,堆栈中压入的函数为f2,在f3被调用后,堆栈里增加f3,当f3执行完后,执行流程回到f2,此时堆栈里只有f2和f2,当f2执行完后,执行流程回到f1,此时堆栈里只有f1,当f1执行完后,堆栈里没有记录任何压入的函数,如图3所示为进程在执行f3时压入堆栈中的函数的示意图。
另外,若进程中的函数f1除了调用f2外,还调用f4,f1和f4先后执行,若f4又会调用f5,那么在两个不同的时刻,记录的该进程的堆栈信息,可能记录到不同的结果,如图4所示,左侧为进程执行f3的时刻采集的进程的堆栈信息,右侧为进程执行f5的时刻采集的进程的堆栈信息。
在堆栈结构中,存入的数据依次从栈底向栈顶的方向依次存入,如此可以从这两个堆栈信息的栈顶向栈底方向计数,左侧的堆栈信息中堆栈层数为3层后达到函数f1,右侧的堆栈信息中堆栈层数为2层后达到函数f1,若该进程是以函数f1为开始,所以针对该进程的不同的堆栈信息,从栈顶向栈底方向计数一定数量后必然会达到一个相同的函数,如f1,此时可以获取这多个堆栈信息中的最大不一致深度max(3,2)=3,也即最大不一致深度可以理解为是在多个堆栈信息中查找到相同函数时各个堆栈信息的最大堆栈深度。
但是,若进程中调用的函数较多时,此时f1函数在堆栈信息中可能距离栈顶的位置很远,此时若从栈顶向栈底方向逐层遍历,若已遍历层数大于或等于预设层数时,还未查找到有相同层的函数相同时,则确定进程未出现死锁。
可以理解地,可针对每个进程设置一个遍历的预设层数,即该预设层数可以是指进程的堆栈最大深度,其可以针对每个进程的实际运行情况来设定。在已遍历层数大于或等于预设层数时,若还未查找到有相同层的函数相同时,表明最大不一致深度必然大于堆栈最大深度了,如此可说明进程未死锁。
例如,如图5所示,若预设层数设置为3,则在当已遍历层数为第3层时,则退出遍历,确定进程未进入死锁,当然,这种情况下可以根据实际需求将预设层数设置得大一些,如此可使得在已遍历层数较多时仍未查找到同一层出现相同的函数时,确定进程未进入死锁。
在上述实现过程中,在已遍历层数大于或等于预设层数时,表明此时待检测程序运行实体为正常运行,其没有出现死锁的情况。
另外,还可以根据每个堆栈信息,从堆栈的栈顶向栈底方向逐层遍历压入堆栈中的函数,当堆栈的目标层中压入的函数在多个堆栈信息中相同时,则确定待检测程序运行实体出现死锁。
其中,目标层可以是指堆栈中的任意一层,如图6所示,图6中在第3层的函数相同,第3层即为目标层,此时检测到第3层的函数相同时,表示进程进入死锁状态,死锁以后进程卡死在第三层处。
或者,若函数在运行过程中各个堆栈信息中若栈顶位置处的函数相同时,也认为进程出现死锁的情况,还可以设置一预设层数,即目标层在堆栈中所在的层数为小于预设层数,该预设层数可以是针对每个进程设置的堆栈最大深度,如预设层数为4,按照上述最大不一致深度的概念,图6中的最大不一致深度为3,此时最大不一致深度小于预设层数,表明进程出现死锁,如此可避免待检测程序运行实体在堆栈的栈顶的第一层就出现相同的函数可能造成误判的情况。
在上述实现过程中,若在多个堆栈信息中检测到堆栈中的目标层的函数相同时,表明该待检测程序运行实体可能一直在循环执行该函数,进而可确定该待检测程序运行实体出现死锁,如此可对待检测程序运行实体的死锁状态进行准确检测。
另外,为了防止其他信息对确定进程是否出现死锁的误判,其堆栈信息中可以排除掉socket等待消息等堆栈停滞函数的信息,也即若在堆栈中压入的函数为堆栈停滞函数时,若目标层出现的函数均为堆栈停滞函数时,此时可认为进程不是出现死锁,则自动跳过这一层,继续遍历堆栈中的其他层是否出现相同的函数,若相同的函数不是堆栈停滞函数时,则可确定进程出现死锁。
另外,在根据进程的多个堆栈信息确定进程出现死锁后,还可以基于多个堆栈信息确定进程出现死锁的原因,如可以确定待检测程序运行实体出现死锁的原因为目标层中压入的函数出现死锁,以及目标层中压入的函数对应的数据结构出现死锁。
其中,数据结构可以为链表,例如,如图6所示,在第三层时进程出现死锁,其出现死锁的原因为函数f1出现死锁,并且函数f1对应的链表出现死锁,即函数f1所在的链表出现死锁。
如此,可在确定出现死锁的函数或链表后,对出现死锁的函数或链表进行排查,可人工参与排查其函数或链表出现死锁的原因等情况,进而可及时定位到进程具体出现死锁的位置,便于及时解除进程的死锁状态,确保进程的正常运行。
在上述实现过程中,可基于多个堆栈信息,分析出待检测程序运行实体出现死锁的函数或数据结构,如此可针对出现死锁的函数或数据结构采取针对性补救性措施,以及时确保待检测程序运行实体可以正常运行。
作为一种实施方式,还可以在确定进程出现死锁后,重新启动待检测程序运行实体,即重新启动进程,以使得进程重新运行,然后可继续对该进程进行死锁检测。
可以理解地,在进程出现死锁后,可及时重新启动进程或者及时采取其他措施使得进程能够尽早恢复正常运行状态。
请参照图7,图7为本申请实施例提供的一种死锁检测装置200的结构框,该装置200可以是电子设备上的模块、程序段或代码。应理解,该装置200与上述图2方法实施例对应,能够执行图2方法实施例涉及的各个步骤,该装置200具体的功能可以参见上文中的描述,为避免重复,此处适当省略详细描述。
可选地,所述装置200包括:
堆栈信息获取模块210,用于获取在每个时刻采集的待检测程序运行实体对应的堆栈信息,共获得多个堆栈信息;
死锁检测模块220,用于基于所述多个堆栈信息确定所述待检测程序运行实体是否出现死锁。
可选地,每个堆栈信息包括在对应时刻采集每个堆栈信息时压入堆栈中的函数,所述死锁检测模块220,用于根据每个堆栈信息,从所述堆栈的栈顶向栈底方向逐层遍历压入所述堆栈中的函数;若已遍历层数大于或等于预设层数时,则确定所述待检测程序运行实体未出现死锁。
可选地,每个堆栈信息包括在对应时刻采集每个堆栈信息时压入堆栈中的函数,所述死锁检测模块220,用于根据每个堆栈信息,从所述堆栈的栈顶向栈底方向逐层遍历压入所述堆栈中的函数;当所述堆栈的目标层中压入的函数在所述多个堆栈信息中相同时,则确定所述待检测程序运行实体出现死锁。
可选地,所述目标层在所述堆栈中所在的层数为小于预设层数。
可选地,所述装置200还包括:
死锁原因确定模块,用于确定所述待检测程序运行实体出现死锁的原因为所述目标层中压入的函数出现死锁,以及所述目标层中压入的函数对应的数据结构出现死锁。
可选地,所述装置200还包括:
重启模块,用于重新启动所述待检测程序运行实体。
可选地,所述堆栈信息获取模块210,用于将每个时刻采集的所述待检测程序运行实体对应的堆栈信息存入对应的数组的对应元素中,其中,所述数组中的每个元素用于存储一个时刻采集的所述待检测程序运行实体对应的堆栈信息;在所述数组中有预设数量的元素存储有所述待检测程序运行实体对应的堆栈信息时,获取所述数组中预设数量的元素中存储的多个堆栈信息。
可选地,所述待检测程序运行实体为电子设备上运行的进程或线程。
本申请实施例提供一种可读存储介质,所述计算机程序被处理器执行时,执行如图2所示方法实施例中电子设备所执行的方法过程。
本实施例公开一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的方法,例如,包括:获取在每个时刻采集的待检测程序运行实体对应的堆栈信息,共获得多个堆栈信息;基于所述多个堆栈信息确定所述待检测程序运行实体是否出现死锁。
综上所述,本申请实施例提供一种死锁检测方法、装置、电子设备及可读存储介质,通过获取待检测程序运行实体的多个堆栈信息,对多个堆栈信息进行分析以确定待检测程序运行实体是否出现死锁,容易实现,并且由于堆栈信息采用堆栈结构进行存储,使得可以很直观地对堆栈信息进行分析定位,从而可准确分析出待检测程序运行实体是否出现死锁。
在本申请所提供的实施例中,应该理解到,所揭露装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
另外,作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
再者,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。
以上所述仅为本申请的实施例而已,并不用于限制本申请的保护范围,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (8)
1.一种死锁检测方法,其特征在于,所述方法包括:
获取在每个时刻采集的待检测程序运行实体对应的堆栈信息,共获得多个堆栈信息;
基于所述多个堆栈信息确定所述待检测程序运行实体是否出现死锁;
其中,每个堆栈信息包括在对应时刻采集每个堆栈信息时压入堆栈中的函数,所述基于所述多个堆栈信息确定所述待检测程序运行实体是否出现死锁,包括:
根据每个堆栈信息,从所述堆栈的栈顶向栈底方向逐层遍历压入所述堆栈中的函数,其中,所述函数不为堆栈停滞函数;
若已遍历层数大于或等于预设层数时,且还未查找到有相同层的函数相同时,则确定所述待检测程序运行实体未出现死锁,其中,所述预设层数指进程的堆栈最大深度;
当所述堆栈的目标层中压入的函数在所述多个堆栈信息中相同时,则确定所述待检测程序运行实体出现死锁,其中,所述目标层在堆栈中所在的层数小于所述预设层数。
2.根据权利要求1所述的方法,其特征在于,所述确定所述待检测程序运行实体出现死锁之后,还包括:
确定所述待检测程序运行实体出现死锁的原因为所述目标层中压入的函数出现死锁,以及所述目标层中压入的函数对应的数据结构出现死锁。
3.根据权利要求1所述的方法,其特征在于,所述确定所述待检测程序运行实体出现死锁之后,还包括:
重新启动所述待检测程序运行实体。
4.根据权利要求1所述的方法,其特征在于,所述获取在每个时刻采集的待检测程序运行实体对应的堆栈信息,共获得多个堆栈信息,包括:
将每个时刻采集的所述待检测程序运行实体对应的堆栈信息存入对应的数组的对应元素中,其中,所述数组中的每个元素用于存储一个时刻采集的所述待检测程序运行实体对应的堆栈信息;
在所述数组中有预设数量的元素存储有所述待检测程序运行实体对应的堆栈信息时,获取所述数组中预设数量的元素中存储的多个堆栈信息。
5.根据权利要求1所述的方法,其特征在于,所述待检测程序运行实体为电子设备上运行的进程或线程。
6.一种死锁检测装置,其特征在于,所述装置包括:
堆栈信息获取模块,用于获取在每个时刻采集的待检测程序运行实体对应的堆栈信息,共获得多个堆栈信息;
死锁检测模块,用于基于所述多个堆栈信息确定所述待检测程序运行实体是否出现死锁;
其中,每个堆栈信息包括在对应时刻采集每个堆栈信息时压入堆栈中的函数,所述死锁检测模块,具体用于:
根据每个堆栈信息,从所述堆栈的栈顶向栈底方向逐层遍历压入所述堆栈中的函数,其中,所述函数不为堆栈停滞函数;
若已遍历层数大于或等于预设层数时,且还未查找到有相同层的函数相同时,则确定所述待检测程序运行实体未出现死锁,其中,所述预设层数指进程的堆栈最大深度;
当所述堆栈的目标层中压入的函数在所述多个堆栈信息中相同时,则确定所述待检测程序运行实体出现死锁,其中,所述目标层在堆栈中所在的层数小于所述预设层数。
7.一种电子设备,其特征在于,包括处理器以及存储器,所述存储器存储有计算机可读取指令,当所述计算机可读取指令由所述处理器执行时,运行如权利要求1-5任一所述的方法。
8.一种可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时运行如权利要求1-5任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911423212.XA CN111159051B (zh) | 2019-12-31 | 2019-12-31 | 死锁检测方法、装置、电子设备及可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911423212.XA CN111159051B (zh) | 2019-12-31 | 2019-12-31 | 死锁检测方法、装置、电子设备及可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111159051A CN111159051A (zh) | 2020-05-15 |
CN111159051B true CN111159051B (zh) | 2023-07-04 |
Family
ID=70560638
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911423212.XA Active CN111159051B (zh) | 2019-12-31 | 2019-12-31 | 死锁检测方法、装置、电子设备及可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111159051B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112098808B (zh) * | 2020-09-16 | 2023-09-19 | 北京高途云集教育科技有限公司 | 一种电路检测方法、装置及设备 |
CN115344360A (zh) * | 2021-05-13 | 2022-11-15 | 华为技术有限公司 | 死锁检测方法、装置以及相关设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107015904A (zh) * | 2016-01-28 | 2017-08-04 | 中兴通讯股份有限公司 | 堆栈的保护方法及装置 |
CN107729240A (zh) * | 2017-09-30 | 2018-02-23 | 山东省科学院自动化研究所 | 嵌入式软件堆栈溢出检测方法和装置 |
WO2018227822A1 (zh) * | 2017-06-12 | 2018-12-20 | 平安科技(深圳)有限公司 | 异常堆栈信息获取方法、装置及计算机可读存储介质 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1996025705A1 (en) * | 1995-02-14 | 1996-08-22 | Fujitsu Limited | Structure and method for high-performance speculative execution processor providing special features |
JP2009271858A (ja) * | 2008-05-09 | 2009-11-19 | Toshiba Corp | 計算機システム及びプログラム |
CN102622300B (zh) * | 2012-04-18 | 2015-03-25 | 迈普通信技术股份有限公司 | 多任务系统中死循环或类死循环的检测方法 |
CN103942113B (zh) * | 2013-11-21 | 2017-03-01 | 小米科技有限责任公司 | 系统重启原因的检测方法、装置及终端设备 |
CN106528318B (zh) * | 2016-11-29 | 2020-02-04 | 迈普通信技术股份有限公司 | 线程死循环检测方法和装置 |
CN107273263B (zh) * | 2017-05-26 | 2020-11-17 | 努比亚技术有限公司 | 一种异常运行的分析方法、应用终端及监控服务器 |
CN109840177B (zh) * | 2017-11-24 | 2021-08-24 | 腾讯科技(深圳)有限公司 | 一种卡顿的处理方法及相关设备 |
CN110609750A (zh) * | 2019-08-01 | 2019-12-24 | 厦门亿联网络技术股份有限公司 | 一种自动分析嵌入式设备死锁的方法及系统 |
CN110457277B (zh) * | 2019-08-19 | 2024-04-16 | 北京博睿宏远数据科技股份有限公司 | 业务处理性能分析方法、装置、设备及存储介质 |
-
2019
- 2019-12-31 CN CN201911423212.XA patent/CN111159051B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107015904A (zh) * | 2016-01-28 | 2017-08-04 | 中兴通讯股份有限公司 | 堆栈的保护方法及装置 |
WO2018227822A1 (zh) * | 2017-06-12 | 2018-12-20 | 平安科技(深圳)有限公司 | 异常堆栈信息获取方法、装置及计算机可读存储介质 |
CN107729240A (zh) * | 2017-09-30 | 2018-02-23 | 山东省科学院自动化研究所 | 嵌入式软件堆栈溢出检测方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN111159051A (zh) | 2020-05-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11360842B2 (en) | Fault processing method, related apparatus, and computer | |
CN109976932B (zh) | 故障注入测试设备和方法 | |
CN109783262B (zh) | 故障数据处理方法、装置、服务器及计算机可读存储介质 | |
CN106789306B (zh) | 通信设备软件故障检测收集恢复方法和系统 | |
US8473789B2 (en) | Memory leak monitoring system and associated methods | |
WO2016188100A1 (zh) | 信息系统故障场景信息收集方法及系统 | |
CN106682162B (zh) | 日志管理方法及装置 | |
CN111159051B (zh) | 死锁检测方法、装置、电子设备及可读存储介质 | |
CN105607973B (zh) | 一种虚拟机系统中设备故障处理的方法、装置及系统 | |
CN116089482A (zh) | 分析大规模数据处理作业 | |
CN113708986A (zh) | 服务器监控装置、方法及计算机可读存储介质 | |
CN111858244A (zh) | 一种硬盘的监控方法、系统、设备以及介质 | |
CN112231128B (zh) | 内存错误处理方法、装置、计算机设备和存储介质 | |
CN114020509A (zh) | 工作负载集群的修复方法、装置、设备及可读存储介质 | |
JP6880961B2 (ja) | 情報処理装置、およびログ記録方法 | |
CN107273291B (zh) | 一种处理器调试方法及系统 | |
CN116028251A (zh) | 一种错误日志的上报方法、装置、设备及可读存储介质 | |
CN113778763B (zh) | 一种三方接口服务故障智能切换方法及系统 | |
US10102052B2 (en) | Dumping resources | |
JP2003345629A (ja) | システム監視装置及びそれに用いるシステム監視方法並びにそのプログラム | |
CN116737505A (zh) | 设备故障信息的收集方法、装置、设备及存储介质 | |
CN118363778A (zh) | 异常原因确定方法、装置、计算机设备和存储介质 | |
CN116489001A (zh) | 交换机故障诊断及恢复方法、装置、交换机及存储介质 | |
KR101385311B1 (ko) | 클라이언트 단말의 오류 관리 장치 및 방법, 그리고 오류 관리 시스템 | |
CN118113508A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |