CN116089098A - 一种线程死循环检测方法、设备及装置 - Google Patents
一种线程死循环检测方法、设备及装置 Download PDFInfo
- Publication number
- CN116089098A CN116089098A CN202111304197.4A CN202111304197A CN116089098A CN 116089098 A CN116089098 A CN 116089098A CN 202111304197 A CN202111304197 A CN 202111304197A CN 116089098 A CN116089098 A CN 116089098A
- Authority
- CN
- China
- Prior art keywords
- thread
- cpu
- detected
- information
- running
- 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
Links
Images
Classifications
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/3024—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a central processing unit [CPU]
-
- 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)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Quality & Reliability (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明实施例提供了一种线程死循环检测方法、设备及装置,涉及软件技术领域,上述方法包括:获取CPU的CPU使用信息以及运行于CPU的线程的线程运行信息;基于CPU使用信息,计算CPU计算资源的使用程度;若使用程度达到预设程度,则基于线程运行信息,确定对CPU的占用程度最高的线程,作为待检测线程;将预设的测试线程的执行优先级由最低优先级调整为目标优先级;获取第一预设时长内测试线程的运行时长;若运行时长小于第二预设时长,则确定待检测线程发生死循环。应用本发明实施例提供的方案可以提高对死循环的进程进行检测的效率。
Description
技术领域
本发明涉及软件技术领域,特别是涉及一种线程死循环检测方法、设备及装置。
背景技术
CPU(Central Processing Unit,中央处理器)是能够处理数据、运行程序的器件,CPU中可以以不同的线程运行不同的程序,但由于部分程序设计缺陷或其他故障,线程在运行过程中可能会出现死循环的问题,死循环线程会不断运行占用CPU大量的计算资源,从而影响CPU中其他线程的运行。为了保证CPU能够正常进行数据处理,需要对死循环的线程进行检测。
现有技术中,需要人工查看CPU占用率,并逐一排查CPU占用率较高的CPU中各个线程的运行情况,以检测出死循环的线程。采用上述方式对死循环的线程进行检测效率较低。
发明内容
本发明实施例的目的在于提供一种线程死循环检测方法、设备及装置,以提高对死循环线程进行检测的效率。具体技术方案如下:
第一方面,本发明实施例提供了一种线程死循环检测方法,所述方法包括:
获取CPU的CPU使用信息以及运行于所述CPU的线程的线程运行信息;
基于所述CPU使用信息,计算所述CPU计算资源的使用程度;
若所述使用程度达到预设程度,则基于所述线程运行信息,确定对所述CPU的占用程度最高的线程,作为待检测线程;
将预设的测试线程的执行优先级由最低优先级调整为目标优先级,其中,所述测试线程与所述待检测线程属于同一目标进程,所述目标优先级低于所述待检测线程的执行优先级,且与所述待检测线程的执行优先级之间的差值为预设差值;
获取第一预设时长内所述测试线程的运行时长;
若所述运行时长小于第二预设时长,则确定所述待检测线程发生死循环。
本发明的一个实施例中,在所述确定所述待检测线程发生死循环之后,还包括:
控制所述待检测线程挂起;
若用于管理所述CPU所处设备的管理线程运行于所述CPU,且所述管理线程的执行优先级低于所述待检测线程的执行优先级,则记录所述待检测线程的任务堆栈中包含的信息,并控制复位所述设备,且控制所述CPU基于所记录的信息重新运行所述待检测线程。
本发明的一个实施例中,所述基于所述CPU使用信息,计算所述CPU计算资源的使用程度,包括:
基于所述CPU使用信息中包含的CPU运行时长、CPU等待时长与CPU空闲时长,计算所述CPU在第一预设时间段内的第一总使用时长;
计算所述CPU运行时长与所述第一总使用时长之间的比值,用于表示CPU计算资源的使用程度。
本发明的一个实施例中,所述基于所述线程运行信息,确定对所述CPU的占用程度最高的线程,作为待检测线程,包括:
基于所述线程运行信息,计算第二预设时间段内运行于所述CPU的各个线程的线程运行时长;
基于所述CPU使用信息,计算所述第二预设时间段内所述CPU的第二总使用时长;
分别计算各个线程的线程运行时长与所述第二总使用时长之间的比值,作为各个线程对所述CPU的占用程度;
选择占用程度最高的线程,作为待检测线程。
第二方面,本发明实施提供了一种线程死循环检测设备,包括存储器,收发机,处理器:
存储器,用于存储计算机程序;收发机,用于在所述处理器的控制下收发数据;处理器,用于读取所述存储器中的计算机程序并执行以下操作:
获取CPU的CPU使用信息以及运行于所述CPU的线程的线程运行信息;
基于所述CPU使用信息,计算所述CPU计算资源的使用程度;
若所述使用程度达到预设程度,则基于所述线程运行信息,确定对所述CPU的占用程度最高的线程,作为待检测线程;
将预设的测试线程的执行优先级由最低优先级调整为目标优先级,其中,所述测试线程与所述待检测线程属于同一目标进程,所述目标优先级低于所述待检测线程的执行优先级,且与所述待检测线程的执行优先级之间的差值为预设差值;
获取第一预设时长内所述测试线程的运行时长;
若所述运行时长小于第二预设时长,则确定所述待检测线程发生死循环。
本发明的一个实施例中,在所述确定所述待检测线程发生死循环之后,还包括:
控制所述待检测线程挂起;
若用于管理所述CPU所处设备的管理线程运行于所述CPU,且所述管理线程的执行优先级低于所述待检测线程的执行优先级,则记录所述待检测线程的任务堆栈中包含的信息,并控制复位所述设备,且控制所述CPU基于所记录的信息重新运行所述待检测线程。
本发明的一个实施例中,所述基于所述CPU使用信息,计算所述CPU计算资源的使用程度,具体包括:
基于所述CPU使用信息中包含的CPU运行时长、CPU等待时长与CPU空闲时长,计算所述CPU在第一预设时间段内的第一总使用时长;
计算所述CPU运行时长与所述第一总使用时长之间的比值,用于表示CPU计算资源的使用程度。
本发明的一个实施例中,所述基于所述线程运行信息,确定对所述CPU的占用程度最高的线程,作为待检测线程,具体包括:
基于所述线程运行信息,计算第二预设时间段内运行于所述CPU的各个线程的线程运行时长;
基于所述CPU使用信息,计算所述第二预设时间段内所述CPU的第二总使用时长;
分别计算各个线程的线程运行时长与所述第二总使用时长之间的比值,作为各个线程对所述CPU的占用程度;
选择占用程度最高的线程,作为待检测线程。
第三方面,本发明实施例提供了一种线程死循环检测装置,所述装置包括:
信息获取模块,用于获取CPU的CPU使用信息以及运行于所述CPU的线程的线程运行信息;
程度计算模块,用于基于所述CPU使用信息,计算所述CPU计算资源的使用程度;
线程确定模块,用于若所述使用程度达到预设程度,则基于所述线程运行信息,确定对所述CPU的占用程度最高的线程,作为待检测线程;
优先级调整模块,用于将预设的测试线程的执行优先级由最低优先级调整为目标优先级,其中,所述测试线程与所述待检测线程属于同一目标进程,所述目标优先级低于所述待检测线程的执行优先级,且与所述待检测线程的执行优先级之间的差值为预设差值;
时长获取模块,用于获取第一预设时长内所述测试线程的运行时长;
死循环确定模块,用于若所述运行时长小于第二预设时长,则确定所述待检测线程发生死循环。
第四方面,本发明实施例提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现第一方面任一所述的方法步骤。
第五方面,本发明实施例还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面任一所述的方法步骤。
本发明实施例有益效果:
本发明实施例提供了一种线程死循环检测方法,首先获取CPU的CPU使用信息以及运行于CPU的线程的线程运行信息,基于CPU使用信息,计算CPU计算资源的使用程度,若使用程度达到预设程度,则基于线程运行信息,确定对CPU的占用程度最高的线程,作为待检测线程。将预设的测试线程的执行优先级由最低优先级调整为低于待检测线程的执行优先级、且与待检测线程的执行优先级之间的差值为预设差值的目标优先级。再获取第一预设时长内测试线程的运行时长;若运行时长小于预设时长,则确定待检测线程发生死循环。
由以上可见,若CPU计算资源的使用程度达到预设程度,则说明该CPU的计算资源被使用的较多,CPU中可能存在由于发生死循环而占用大量计算资源的线程,因此可以开始对CPU中运行的线程进行线程死循环的检测。若线程发生死循环,则该线程被循环执行,占用CPU的计算资源的占用程度往往最高。因此可以将占用程度最高的线程作为待检测线程,对待检测线程进行检测。另外,待检测线程与测试线程均属于目标进程,在开始对待检测线程进行检测后,将测试线程的执行优先级调整为低于待检测线程的执行优先级、且与待检测线程的执行优先级之间的差值为预设差值目标优先级。若待检测线程发生死循环占用大量的计算资源,则在经过第一预设时长后,测试线程也往往不会被运行,因此若测试线程的运行时长小于第二预设时长,则可以认为测试线程发生死循环。否则,若待检测线程未发生死循环,则在经过第一预设时长后,CPU会调度执行优先级与待检测线程的执行优先级较为接近的测试线程,因此若测试线程的运行时长不小于第二预设时长,则可以认为测试线程未发生死循环。所以通过本发明实施例可以在不采用人工的情况下确定线程是否发生死循环,从而可以提高对死循环的线程进行检测的效率。
另外,测试线程原本的执行优先级为目标进程包含的线程中的最低优先级,因此在大多数情况下测试线程不会被执行,测试线程在大多数情况下不会占用CPU的计算资源,也就不会影响其他线程的运行。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的第一种线程死循环检测方法的流程示意图;
图2为本发明实施例提供的第二种线程死循环检测方法的流程示意图;
图3为本发明实施例提供的一种线程死循环检测设备的结构示意图;
图4为本发明实施例提供的第一种线程死循环检测装置的结构示意图;
图5为本发明实施例提供的第二种线程死循环检测装置的结构示意图。
具体实施方式
本发明实施例中术语“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
本发明实施例中术语“多个”是指两个或两个以上,其它量词与之类似。
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员基于本发明实施例所获得的所有其他实施例,都属于本发明保护的范围。
由于现有技术中检测死循环线程的效率较低,为了解决这一问题,本发明实施例提供了一种线程死循环检测方法、设备及装置。
本发明实施例提供了一种线程死循环检测方法,上述方法包括:
获取CPU的CPU使用信息以及运行于上述CPU的线程的线程运行信息;
基于上述CPU使用信息,计算上述CPU计算资源的使用程度;
若上述使用程度达到预设程度,则基于上述线程运行信息,确定对上述CPU的占用程度最高的线程,作为待检测线程;
将预设的测试线程的执行优先级由最低优先级调整为目标优先级,其中,上述测试线程与上述待检测线程属于同一目标进程,上述目标优先级低于所述待检测线程的执行优先级,且与上述待检测线程的执行优先级之间的差值为预设差值;
获取第一预设时长内上述测试线程的运行时长;
若上述运行时长小于第二预设时长,则确定上述待检测线程发生死循环。
由以上可见,若CPU计算资源的使用程度达到预设程度,则说明该CPU的计算资源被使用的较多,CPU中可能存在由于发生死循环而占用大量计算资源的线程,因此可以开始对CPU中运行的线程进行线程死循环的检测。若线程发生死循环,则该线程被循环执行,占用CPU的计算资源的占用程度往往最高。因此可以将占用程度最高的线程作为待检测线程,对待检测线程进行检测。另外,待检测线程与测试线程均属于目标进程,在开始对待检测线程进行检测后,将测试线程的执行优先级调整为低于待检测线程的执行优先级、且与待检测线程的执行优先级之间的差值为预设差值目标优先级。若待检测线程发生死循环占用大量的计算资源,则在经过第一预设时长后,测试线程也往往不会被运行,因此若测试线程的运行时长小于第二预设时长,则可以认为测试线程发生死循环。否则,若待检测线程未发生死循环,则在经过第一预设时长后,CPU会调度执行优先级与待检测线程的执行优先级较为接近的测试线程,因此若测试线程的运行时长不小于第二预设时长,则可以认为测试线程未发生死循环。所以通过本发明实施例可以在不采用人工的情况下确定线程是否发生死循环,从而可以提高对死循环的线程进行检测的效率。
另外,测试线程原本的执行优先级为目标进程包含的线程中的最低优先级,因此在大多数情况下测试线程不会被执行,测试线程在大多数情况下不会占用CPU的计算资源,也就不会影响其他线程的运行。
参见图1,为本发明实施例提供的第一种线程死循环检测方法的流程示意图,上述方法包括以下步骤S101-S106。
其中,本发明实施例的执行主体可以为设备内安装的CPU上运行的一个进程,上述进程可以被称为主进程。上述设备可以为任意电子设备,例如,上述电子设备可以为手机、电脑、基站等。
S101:获取CPU的CPU使用信息以及运行于上述CPU的线程的线程运行信息。
具体的,上述CPU可以是运行上述主进程的CPU,也可以是设备内安装的其他CPU。上述线程可以是运行于主进程中的线程,也可以是运行主进程之外的线程,若上述线程运行于主进程之外的其他进程中,则可以将运行上述线程的进程称为从进程。
其中,若上述线程运行于主进程内,则主进程可以直接获取上述线程的线程运行信息以及CPU的CPU使用信息。
另外,若上述线程运行于从进程内,则从进程可以获取线程对应的任务名、线程的TID(Thread Identifier,线程控制符)、从进程的PID(Process Identifier,线程控制符)以及线程的执行优先级、线程所处CPU的CPU编号,并提供hook接口,上述从进程可以通过hook接口基于所获取的信息将上述线程注册给主进程。完成线程注册之后,主进程便可以获取上述线程的线程运行信息以及运行线程的CPU的CPU使用信息。
具体的,上述线程运行信息中可以包含线程运行的用户态执行时长utime与内核态执行时长stime。上述CPU使用信息中可以包含用户态使用CPU的时长、用作nice加权的进程分配的用户态CPU的时长、系统态使用CPU的时长、CPU空闲时长,CPU等待磁盘写入完成的CPU等待时长、硬中断消耗的时长、软中断消耗的时长、虚拟环境运行其它操作系统花费的时长、操作系统运行虚拟CPU花费的时长等信息。上述线程运行信息与CPU使用信息中包含的各项时长均可以为自统计起始时刻起的累计时长。
另外,上述线程运行信息以及CPU使用信息中包含的各类时长均可以以节拍数的形式表示,节拍是操作系统进程调度的最小时间片,不同操作系统中一个节拍的时长不同,往往为1ms-10ms之间。
本发明的一个实施例中,设备可以按照第一写入周期,持续将CPU使用信息写入预设的CPU信息文件中,上述CPU信息文件中记录有设备内安装的各个CPU的CPU使用信息,则主进程可以读取上述CPU信息文件,获取上述CPU的CPU使用信息。例如,若上述设备配置的操作系统为Linux系统,则上述CPU信息文件可以为proc/stat文件。
具体的,第一写入周期可以与操作系统的时钟周期相同,也可以为其他任意周期。上述设备配置的操作系统不同,时钟周期的时长往往也不相同,例如,上述时钟周期的时长可以为3s、5s等。
本发明的另一个实施例中,设备可以按照第二写入周期,持续将线程运行信息写入预设的线程信息文件中,上述线程信息文件中记录有设备安装的各个CPU所执行的各个线程的线程运行信息。则主进程可以读取上述线程信息文件,获取上述线程的线程运行信息。例如,若上述设备配置的操作系统为Linux系统,则上述线程信息文件同样为proc/stat文件。
具体的,第二写入周期可以与操作系统的时钟周期相同,也可以为其他任意周期。
另外,上述设备往往以所配置的操作系统的时钟周期为基础进行线程调度,一个时钟周期内不会发生线程调度,也就是在一个时钟周期内线程运行信息以及CPU使用信息不会发生变化,因此上述主进程可以每经过一个时钟周期,获取一次CPU使用信息和线程运行信息。
再者,设备中可能安装有多个CPU,每一CPU均可以运行多个线程,针对每一CPU主进程均可以采用本发明实施例提供的方案对该CPU上运行的死循环线程进行检测。为此主进程需要获取大量线程的线程运行信息已进行后续的检测处理,主进程需要处理大量的数据。为了减少主进程需要处理的数据量,可以人为预先选择CPU上的部分发生死循环的可能性较大的线程作为关键线程,主进程仅监控关键线程并获取关键线程的线程运行信息,并仅对关键线程进行进一步的死循环检测,从而可以减少主进程的数据处理量。
并且,在设备中安装有多个CPU的情况下,设备可以为线程分配CPU,由所分配的CPU运行该线程,所以对于一个线程而言,运行该线程的CPU不固定,主进程难以确定需要监控的线程所在的CPU,也就难以获取线程运行信息。为此可以设置线程的亲核性,也就是为每一线程设置固定的运行该线程的CPU,以便于主进程获取线程的线程运行信息。
S102:基于上述CPU使用信息,计算上述CPU计算资源的使用程度。
具体的,CPU在进行数据处理的过程中会消耗计算资源,单位时长内CPU进行数据处理的时长越长,说明CPU计算资源的使用程度越高。因此,可以基于CPU使用信息,统计单位时长内CPU进行数据处理的时长,并计算所统计的时长与单位时长之间的比值,作为上述CPU计算资源的使用程度。
由于随着CPU的运行,CPU中执行的进程需要消耗的计算资源会不断发生变化,也就是CPU计算资源的使用程度会不断发生变化。为了保证计算得到的使用程度能够反映当前CPU计算资源的使用情况,上述单位时长的取值可以较小,计算当前时刻之前单位时长内CPU进行数据处理的时长与单位时长之间的比值,来表示当前时刻CPU计算资源的使用程度。例如,上述单位时长可以为10ms、20ms等。
本发明的一个实施例中,可以通过下文所示的步骤A-步骤B实现步骤S102,在此暂不详述。
S103:若上述使用程度达到预设程度,则基于上述线程运行信息,确定对上述CPU的占用程度最高的线程,作为待检测线程。
具体的,若CPU运行的线程中存在发生死循环的线程,则该线程会被循环执行从而占用CPU大量的计算资源,进而导致CPU计算资源的使用程度较高,因此若CPU计算资源的使用程度较高,可以进一步检测是否存在发生死循环的线程。相反的,若CPU计算资源的使用程度较低,则可以确定CPU所运行的线程中存在死循环线程的可能性较低,则可以不继续执行后续的步骤,结束流程。
另外,线程对CPU的占用程度指的是该线程占用CPU计算资源的程度,线程的占用程度越高说明该线程消耗的CPU的计算资源越多。若上述CPU中存在发生死循环的线程,则该线程被循环执行,往往对CPU的占用程度最高,因此可以将占用程度最高的线程作为待检测线程,进一步对待检测线程进行检测。
本发明的一个实施例中,可以通过以下步骤C确定待检测线程。
步骤C:若在第三预设时长内上述使用程度始终达到预设程度,则基于上述线程运行信息,确定对上述CPU的占用程度最高的线程,作为待检测线程。
具体的,部分线程在未发生死循环的情况下也会占用CPU较大量的计算资源,但是经过一段时间之后此类线程被执行完毕之后CPU的占用程度便会下降,不会长时间占用CPU大量的计算资源。但发生死循环的线程会长时间占用CPU大量的计算资源,导致CPU的使用程度始终较高。
因此,本实施例可以在第三预设时长内使用程度始终达到预设程度的情况下,才认为CPU运行的线程中可能存在发生死循环的线程,才会继续确定待检测线程并进行后续的检测过程。从而可防止正常运行的线程在短时间内占用CPU较多的计算资源而触发死循环检测过程之后造成的计算资源的浪费。
本发明的一个实施例中,可以通过下文步骤D-步骤G确定待检测线程,在此暂不详述。
S104:将预设的测试线程的执行优先级由最低优先级调整为目标优先级。
其中,上述测试线程与上述待检测线程属于同一目标进程,上述目标优先级低于上述待检测线程的执行优先级,且与上述待检测线程的执行优先级之间的差值为预设差值。
具体的,在未调整测试线程的执行优先级之前,测试线程的执行优先级是目标进程中的线程中最低的,在CPU的使用程度未达到预设程度的情况下测试线程大概率不会被执行,因此测试线程在大多数情况下不会占用CPU的计算资源,也就不会影响其他线程的运行。
另外,目标优先级低于待检测线程的执行优先级,若待检测线程未发生死循环,则理论上CPU可以对线程进行调度,可以同步执行待检测线程与测试线程。若待检测线程发生死循环,则待检测线程占用CPU大量的计算资源,那么测试线程难以被执行。但若目标优先级与待检测线程的执行优先级之间的差距过大,则即使待检测线程未发生死循环,CPU会优先执行与待检测线程之间执行优先级差距较小的其他线程,测试线程可能依旧难以被执行,导致难以基于测试线程的运行情况区分待检测线程是否发生死循环。因此上述预设差值可以被设置为较小值,例如,预设差值可以为1,则将测试线程的执行优先级调整为目标优先级之后,测试线程的执行优先级仅次于待检测线程。
S105:获取第一预设时长内上述测试线程的运行时长。
具体的,在将测试线程的优先级调整为目标优先级第一预设时长后,可以获取测试线程的线程运行信息,并基于线程运行信息确定测试线程在第一预设时长内的运行时长。
另外,由于待检测线程的执行优先级高于测试线程,因此CPU会优先执行待检测线程,若待检测线程发生死循环,则CPU难以执行测试线程,所获取到的测试线程的运行时长较短。此外,若上述第一预设时长较短,则即使待检测线程未发生死循环,在较短的时间内CPU可能依旧不会执行测试线程,所获取到的测试线程的运行时长同样较短,难以基于运行时长区分待检测线程是否发生故障。因此可以将上述第一预设时长设置为较大值,以保证基于运行时长能够对待检测线程是否发生故障进行检测。
例如,上述第一预设时长可以为10分钟、15分钟等。
S106:若上述运行时长小于第二预设时长,则确定上述待检测线程发生死循环。
若上述运行时长小于第二预设时长,则说明测试线程在第一预设时长内的运行时长较短,也就是CPU在第一预设时长内主要在执行待检测线程,待检测线程长时间占用CPU的计算资源,因此可以判定上述待检测线程发生死循环。
由以上可见,若CPU计算资源的使用程度达到预设程度,则说明该CPU的计算资源被使用的较多,CPU中可能存在由于发生死循环而占用大量计算资源的线程,因此可以开始对CPU中运行的线程进行线程死循环的检测。若线程发生死循环,则该线程被循环执行,占用CPU的计算资源的占用程度往往最高。因此可以将占用程度最高的线程作为待检测线程,对待检测线程进行检测。另外,待检测线程与测试线程均属于目标进程,在开始对待检测线程进行检测后,将测试线程的执行优先级调整为低于待检测线程的执行优先级、且与待检测线程的执行优先级之间的差值为预设差值目标优先级。若待检测线程发生死循环占用大量的计算资源,则在经过第一预设时长后,测试线程也往往不会被运行,因此若测试线程的运行时长小于第二预设时长,则可以认为测试线程发生死循环。否则,若待检测线程未发生死循环,则在经过第一预设时长后,CPU会调度执行优先级与待检测线程的执行优先级较为接近的测试线程,因此若测试线程的运行时长不小于第二预设时长,则可以认为测试线程未发生死循环。所以通过本发明实施例可以在不采用人工的情况下确定线程是否发生死循环,从而可以提高对死循环的线程进行检测的效率。
另外,测试线程原本的执行优先级为目标进程包含的线程中的最低优先级,因此在大多数情况下测试线程不会被执行,测试线程在大多数情况下不会占用CPU的计算资源,也就不会影响其他线程的运行。
本发明的一个实施例中,可以通过以下步骤A-步骤B确定CPU的使用程度。
步骤A:基于上述CPU使用信息中包含的CPU运行时长、CPU等待时长与CPU空闲时长,计算上述CPU在第一预设时间段内的第一总使用时长。
其中,上述CPU运行时长可以为CPU使用信息中包含的用户态使用CPU的时长、用作nice加权的进程分配的用户态CPU的时长、系统态使用CPU的时长、硬中断消耗的时长、软中断消耗的时长、虚拟环境运行其它操作系统花费的时长、操作系统运行虚拟CPU花费的时长之和。
CPU等待时长可以为CPU使用信息中包含的CPU等待磁盘写入完成的时长。
具体的,无论是CPU处于运行状态、等待状态还是空闲状态,CPU均被使用,因此可以将CPU使用信息中包含的各项时长相加,也就是将CPU运行时长、CPU等待时长与CPU空闲时长相加,得到第一总使用时长。
步骤B:计算上述CPU运行时长与上述第一总使用时长之间的比值,用于表示CPU计算资源的使用程度。
具体的,CPU在处于空闲状态与等待状态的过程中并不会进行数据处理,也就不会消耗CPU的计算资源,只有在CPU处于运行状态的过程中才真正消耗计算资源,CPU运行时长越长CPU消耗的计算资源越多,可以计算CPU运行时长与第一总使用时长之间的比值,表示CPU计算资源的使用程度。
本发明的另一个实施例中,可以通过以下步骤D-步骤G确定待检测线程。
步骤D:基于上述线程运行信息,计算第二预设时间段内运行于上述CPU的各个线程的线程运行时长。
具体的,可以分别获取第二预设时间段的起始时刻和终止时刻各个线程的线程运行信息。针对每一线程,分别从线程运行信息中获取起始时刻线程累计运行的用户态执行时长与内核态执行时长,将用户态执行时长与内核态执行时长相加,得到起始时刻线程累计运行的第一时长。并获取终止时刻线程累计运行的用户态执行时长与内核态执行时长,将用户态执行时长与内核态执行时长相加,得到终止时刻线程累计运行的第二时长。计算第二时长与第一时长之间的差值,得到第二预设时间段内线程运行时长。
步骤E:基于上述CPU使用信息,计算上述第二预设时间段内上述CPU的第二总使用时长。
具体的,可以分别计算第二预设时长的起始时刻CPU的总使用时长以及第二预设时长的终止时刻CPU的总使用时长,计算两者之差,作为第二总使用时长。
CPU总使用时长的计算方法可以参见上文步骤A-步骤B,在此不再赘述。
步骤F:分别计算各个线程的线程运行时长与上述第二总使用时长之间的比值,作为各个线程对上述CPU的占用程度。
具体的,线程占用CPU的占用程度越高,CPU便需要越长的时间运行该线程,也就是在CPU的总使用时长中用于运行该线程的时长的比值越高。因此可以分别计算各个线程的线程运行时长与第二总使用时长之间的比值,作为各个线程对CPU的占用程度。
步骤G:选择占用程度最高的线程,作为待检测线程。
参见图2,为本发明实施例提供的第二种线程死循环检测方法的流程示意图,与前述图1所示的实施例相比,在步骤S106之后,还包括以下步骤S107-S108。
S107:控制上述待检测线程挂起。
具体的,若上述待检测线程位于主进程中,则主进程可以直接挂起该待检测线程。若上述待检测线程位于从进程中,则主进程可以向从线程发送线程挂起命令,从线程在获取到线程挂起命令后可以控制待检测线程挂起。待检测线程被挂起后不会被执行,从而可以释放发生死循环的待检测线程占用的计算资源,使得其他线程能够继续正常运行。
另外,在控制上述待检测线程挂起之后,还可以记录待检测线程的任务堆栈中包含的信息,其中,上述信息可以记录到日志中保存到磁盘内,上述信息可以包括待检测线程对应的任务名、待检测线程对应的程序执行到的位置等信息,在大多数情况下上述位置即为待检测线程对应的程序中存在错误引起待检测线程发生死循环的程序所在的位置。
再者,在控制上述待检测线程挂起之后,还可以生成告警信息,上述告警信息中包含待检测线程所处任务的任务名、待检测线程的tid等信息。主进程可以控制设备直接显示上述告警信息,或向远程控制设备发送上述告警信息,以告知管理人员上述待检测线程发生死循环。
S108:若用于管理上述CPU所处设备的管理线程运行于上述CPU,且上述管理线程的执行优先级低于上述待检测线程的执行优先级,记录上述待检测线程的任务堆栈中包含的信息,并控制复位上述设备,且控制上述CPU基于所记录的信息重新运行上述待检测线程。
具体的,若上述管理线程与待检测线程运行于同一CPU,且管理线程的执行优先级低于待检测线程的执行优先级,则待检测线程发生死循环会影响管理线程的正常运行,导致用户难以通过上述管理线程管理设备,使得上述设备进入托管状态。特别是若上述设备为基站等大型设备,工作人员往往需要通过远程控制设备对大型设备进行管理,则若管理线程难以正常运行会导致工作人员难以对该大型设备进行控制。挂起上述待检测线程之后,为了能够重新执行上述管理线程,可以对设备进行复位,并且基于所记录的信息运行上述待检测线程,不再执行导致待检测线程发生死循环的程序,以防止设备复位重新执行待检测线程之后待检测线程再次发生死循环。
另外,若待检测线程与管理线程不属于同一CPU或上述管理线程与待检测线程运行于同一CPU,但管理线程的执行优先级高于待检测线程的执行优先级,则待检测线程发生死循环对管理线程的运行不会造成影响,因此挂起待检测线程之后不需要对设备进行复位。
由以上可见,在确定待检测线程发生死循环之后,为了防止待检测线程继续占用CPU大量的计算资源,主进程可以控制待检测线程挂起,从而释放待检测线程所占用的CPU的计算资源,使得CPU能够正常的继续执行其他线程。并且,若上述管理线程与待检测线程运行于同一CPU,且管理线程的执行优先级低于待检测线程的执行优先级,则挂起影响管理线程的待检测线程之后,可以复位上述设备,使得管理线程能够重新被正常执行,使得用户能够通过上述管理线程管理上述设备,防止上述设备进入托管状态。
与前述线程死循环检测方法相对应,本发明实施例还提供了一种线程死循环检测设备。
参见图3,为本发明实施例提供的一种线程死循环检测设备的结构示意图,包括存储器301,收发机302,处理器303:
存储器301,用于存储计算机程序;收发机302,用于在所述处理器的控制下收发数据;处理器303,用于读取所述存储器中的计算机程序并执行以下操作:
获取CPU的CPU使用信息以及运行于所述CPU的线程的线程运行信息;
基于所述CPU使用信息,计算所述CPU计算资源的使用程度;
若所述使用程度达到预设程度,则基于所述线程运行信息,确定对所述CPU的占用程度最高的线程,作为待检测线程;
将预设的测试线程的执行优先级由最低优先级调整为目标优先级,其中,所述测试线程与所述待检测线程属于同一目标进程,所述目标优先级低于所述待检测线程的执行优先级,且与所述待检测线程的执行优先级之间的差值为预设差值;
获取第一预设时长内所述测试线程的运行时长;
若所述运行时长小于第二预设时长,则确定所述待检测线程发生死循环。
由以上可见,若CPU计算资源的使用程度达到预设程度,则说明该CPU的计算资源被使用的较多,CPU中可能存在由于发生死循环而占用大量计算资源的线程,因此可以开始对CPU中运行的线程进行线程死循环的检测。若线程发生死循环,则该线程被循环执行,占用CPU的计算资源的占用程度往往最高。因此可以将占用程度最高的线程作为待检测线程,对待检测线程进行检测。另外,待检测线程与测试线程均属于目标进程,在开始对待检测线程进行检测后,将测试线程的执行优先级调整为低于待检测线程的执行优先级、且与待检测线程的执行优先级之间的差值为预设差值目标优先级。若待检测线程发生死循环占用大量的计算资源,则在经过第一预设时长后,测试线程也往往不会被运行,因此若测试线程的运行时长小于第二预设时长,则可以认为测试线程发生死循环。否则,若待检测线程未发生死循环,则在经过第一预设时长后,CPU会调度执行优先级与待检测线程的执行优先级较为接近的测试线程,因此若测试线程的运行时长不小于第二预设时长,则可以认为测试线程未发生死循环。所以通过本发明实施例可以在不采用人工的情况下确定线程是否发生死循环,从而可以提高对死循环的线程进行检测的效率。
另外,测试线程原本的执行优先级为目标进程包含的线程中的最低优先级,因此在大多数情况下测试线程不会被执行,测试线程在大多数情况下不会占用CPU的计算资源,也就不会影响其他线程的运行。
本发明的一个实施例中,在所述确定所述待检测线程发生死循环之后,还包括:
控制所述待检测线程挂起;
若用于管理所述CPU所处设备的管理线程运行于所述CPU,且所述管理线程的执行优先级低于所述待检测线程的执行优先级,则记录所述待检测线程的任务堆栈中包含的信息,并控制复位所述设备,且控制所述CPU基于所记录的信息重新运行所述待检测线程。
由以上可见,在确定待检测线程发生死循环之后,为了防止待检测线程继续占用CPU大量的计算资源,主进程可以控制待检测线程挂起,从而释放待检测线程所占用的CPU的计算资源,使得CPU能够正常的继续执行其他线程。并且,若上述管理线程与待检测线程运行于同一CPU,且管理线程的执行优先级低于待检测线程的执行优先级,则挂起影响管理线程的待检测线程之后,可以复位上述设备,使得管理线程能够重新被正常执行,使得用户能够通过上述管理线程管理上述设备,防止上述设备进入托管状态。
本发明的一个实施例中,所述基于所述CPU使用信息,计算所述CPU计算资源的使用程度,具体包括:
基于所述CPU使用信息中包含的CPU运行时长、CPU等待时长与CPU空闲时长,计算所述CPU在第一预设时间段内的第一总使用时长;
计算所述CPU运行时长与所述第一总使用时长之间的比值,用于表示CPU计算资源的使用程度。
本发明的一个实施例中,所述基于所述线程运行信息,确定对所述CPU的占用程度最高的线程,作为待检测线程,具体包括:
基于所述线程运行信息,计算第二预设时间段内运行于所述CPU的各个线程的线程运行时长;
基于所述CPU使用信息,计算所述第二预设时间段内所述CPU的第二总使用时长;
分别计算各个线程的线程运行时长与所述第二总使用时长之间的比值,作为各个线程对所述CPU的占用程度;
选择占用程度最高的线程,作为待检测线程。
与前述线程死循环检测方法相对应,本发明实施例还提供了一种线程死循环检测装置。
参见图4,为本发明实施例提供的第一种线程死循环检测装置的结构示意图。上述装置包括:
信息获取模块401,用于获取CPU的CPU使用信息以及运行于所述CPU的线程的线程运行信息;
程度计算模块402,用于基于所述CPU使用信息,计算所述CPU计算资源的使用程度;
线程确定模块403,用于若所述使用程度达到预设程度,则基于所述线程运行信息,确定对所述CPU的占用程度最高的线程,作为待检测线程;
优先级调整模块404,用于将预设的测试线程的执行优先级由最低优先级调整为目标优先级,其中,所述测试线程与所述待检测线程属于同一目标进程,所述目标优先级低于所述待检测线程的执行优先级,且与所述待检测线程的执行优先级之间的差值为预设差值;
时长获取模块405,用于获取第一预设时长内所述测试线程的运行时长;
死循环确定模块406,用于若所述运行时长小于第二预设时长,则确定所述待检测线程发生死循环。
由以上可见,若CPU计算资源的使用程度达到预设程度,则说明该CPU的计算资源被使用的较多,CPU中可能存在由于发生死循环而占用大量计算资源的线程,因此可以开始对CPU中运行的线程进行线程死循环的检测。若线程发生死循环,则该线程被循环执行,占用CPU的计算资源的占用程度往往最高。因此可以将占用程度最高的线程作为待检测线程,对待检测线程进行检测。另外,待检测线程与测试线程均属于目标进程,在开始对待检测线程进行检测后,将测试线程的执行优先级调整为低于待检测线程的执行优先级、且与待检测线程的执行优先级之间的差值为预设差值目标优先级。若待检测线程发生死循环占用大量的计算资源,则在经过第一预设时长后,测试线程也往往不会被运行,因此若测试线程的运行时长小于第二预设时长,则可以认为测试线程发生死循环。否则,若待检测线程未发生死循环,则在经过第一预设时长后,CPU会调度执行优先级与待检测线程的执行优先级较为接近的测试线程,因此若测试线程的运行时长不小于第二预设时长,则可以认为测试线程未发生死循环。所以通过本发明实施例可以在不采用人工的情况下确定线程是否发生死循环,从而可以提高对死循环的线程进行检测的效率。
另外,测试线程原本的执行优先级为目标进程包含的线程中的最低优先级,因此在大多数情况下测试线程不会被执行,测试线程在大多数情况下不会占用CPU的计算资源,也就不会影响其他线程的运行。
参见图5,为本发明实施例提供的第二种线程死循环检测装置的结构示意图,与前述图4所示的实施例相比,上述装置还包括:
线程挂起模块407,用于控制所述待检测线程挂起;
设备复位模块408,用于若用于管理所述CPU所处设备的管理线程运行于所述CPU,且所述管理线程的执行优先级低于所述待检测线程的执行优先级,则记录所述待检测线程的任务堆栈中包含的信息,并控制复位所述设备,且控制所述CPU基于所记录的信息重新运行所述待检测线程。
由以上可见,在确定待检测线程发生死循环之后,为了防止待检测线程继续占用CPU大量的计算资源,主进程可以控制待检测线程挂起,从而释放待检测线程所占用的CPU的计算资源,使得CPU能够正常的继续执行其他线程。并且,若上述管理线程与待检测线程运行于同一CPU,且管理线程的执行优先级低于待检测线程的执行优先级,则挂起影响管理线程的待检测线程之后,可以复位上述设备,使得管理线程能够重新被正常执行,使得用户能够通过上述管理线程管理上述设备,防止上述设备进入托管状态。
本发明的一个实施例中,所述程度计算模块402,具体用于:
基于所述CPU使用信息中包含的CPU运行时长、CPU等待时长与CPU空闲时长,计算所述CPU在第一预设时间段内的第一总使用时长;
计算所述CPU运行时长与所述第一总使用时长之间的比值,用于表示CPU计算资源的使用程度
本发明的一个实施例中,所述线程确定模块403,具体用于:
基于所述线程运行信息,计算第二预设时间段内运行于所述CPU的各个线程的线程运行时长;
基于所述CPU使用信息,计算所述第二预设时间段内所述CPU的第二总使用时长;
分别计算各个线程的线程运行时长与所述第二总使用时长之间的比值,作为各个线程对所述CPU的占用程度;
选择占用程度最高的线程,作为待检测线程。
在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述任一线程死循环检测方法的步骤。
应用本发明实施例提供的计算机可读存储介质检测线程死循环时,若CPU计算资源的使用程度达到预设程度,则说明该CPU的计算资源被使用的较多,CPU中可能存在由于发生死循环而占用大量计算资源的线程,因此可以开始对CPU中运行的线程进行线程死循环的检测。若线程发生死循环,则该线程被循环执行,占用CPU的计算资源的占用程度往往最高。因此可以将占用程度最高的线程作为待检测线程,对待检测线程进行检测。另外,待检测线程与测试线程均属于目标进程,在开始对待检测线程进行检测后,将测试线程的执行优先级调整为低于待检测线程的执行优先级、且与待检测线程的执行优先级之间的差值为预设差值目标优先级。若待检测线程发生死循环占用大量的计算资源,则在经过第一预设时长后,测试线程也往往不会被运行,因此若测试线程的运行时长小于第二预设时长,则可以认为测试线程发生死循环。否则,若待检测线程未发生死循环,则在经过第一预设时长后,CPU会调度执行优先级与待检测线程的执行优先级较为接近的测试线程,因此若测试线程的运行时长不小于第二预设时长,则可以认为测试线程未发生死循环。所以通过本发明实施例可以在不采用人工的情况下确定线程是否发生死循环,从而可以提高对死循环的线程进行检测的效率。
另外,测试线程原本的执行优先级为目标进程包含的线程中的最低优先级,因此在大多数情况下测试线程不会被执行,测试线程在大多数情况下不会占用CPU的计算资源,也就不会影响其他线程的运行。
在本发明提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中任一线程死循环检测方法。
应用本发明实施例提供的计算机程序产品检测线程死循环时,若CPU计算资源的使用程度达到预设程度,则说明该CPU的计算资源被使用的较多,CPU中可能存在由于发生死循环而占用大量计算资源的线程,因此可以开始对CPU中运行的线程进行线程死循环的检测。若线程发生死循环,则该线程被循环执行,占用CPU的计算资源的占用程度往往最高。因此可以将占用程度最高的线程作为待检测线程,对待检测线程进行检测。另外,待检测线程与测试线程均属于目标进程,在开始对待检测线程进行检测后,将测试线程的执行优先级调整为低于待检测线程的执行优先级、且与待检测线程的执行优先级之间的差值为预设差值目标优先级。若待检测线程发生死循环占用大量的计算资源,则在经过第一预设时长后,测试线程也往往不会被运行,因此若测试线程的运行时长小于第二预设时长,则可以认为测试线程发生死循环。否则,若待检测线程未发生死循环,则在经过第一预设时长后,CPU会调度执行优先级与待检测线程的执行优先级较为接近的测试线程,因此若测试线程的运行时长不小于第二预设时长,则可以认为测试线程未发生死循环。所以通过本发明实施例可以在不采用人工的情况下确定线程是否发生死循环,从而可以提高对死循环的线程进行检测的效率。
另外,测试线程原本的执行优先级为目标进程包含的线程中的最低优先级,因此在大多数情况下测试线程不会被执行,测试线程在大多数情况下不会占用CPU的计算资源,也就不会影响其他线程的运行。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于设备、装置、存储介质及计算机程序实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机可执行指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机可执行指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些处理器可执行指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的处理器可读存储器中,使得存储在该处理器可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些处理器可执行指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请实施例及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (10)
1.一种线程死循环检测方法,其特征在于,所述方法包括:
获取CPU的CPU使用信息以及运行于所述CPU的线程的线程运行信息;
基于所述CPU使用信息,计算所述CPU计算资源的使用程度;
若所述使用程度达到预设程度,则基于所述线程运行信息,确定对所述CPU的占用程度最高的线程,作为待检测线程;
将预设的测试线程的执行优先级由最低优先级调整为目标优先级,其中,所述测试线程与所述待检测线程属于同一目标进程,所述目标优先级低于所述待检测线程的执行优先级,且与所述待检测线程的执行优先级之间的差值为预设差值;
获取第一预设时长内所述测试线程的运行时长;
若所述运行时长小于第二预设时长,则确定所述待检测线程发生死循环。
2.根据权利要求1所述的方法,其特征在于,在所述确定所述待检测线程发生死循环之后,还包括:
控制所述待检测线程挂起;
若用于管理所述CPU所处设备的管理线程运行于所述CPU,且所述管理线程的执行优先级低于所述待检测线程的执行优先级,则记录所述待检测线程的任务堆栈中包含的信息,并控制复位所述设备,且控制所述CPU基于所记录的信息重新运行所述待检测线程。
3.根据权利要求1或2所述的方法,其特征在于,所述基于所述CPU使用信息,计算所述CPU计算资源的使用程度,包括:
基于所述CPU使用信息中包含的CPU运行时长、CPU等待时长与CPU空闲时长,计算所述CPU在第一预设时间段内的第一总使用时长;
计算所述CPU运行时长与所述第一总使用时长之间的比值,用于表示CPU计算资源的使用程度。
4.根据权利要求1或2所述的方法,其特征在于,所述基于所述线程运行信息,确定对所述CPU的占用程度最高的线程,作为待检测线程,包括:
基于所述线程运行信息,计算第二预设时间段内运行于所述CPU的各个线程的线程运行时长;
基于所述CPU使用信息,计算所述第二预设时间段内所述CPU的第二总使用时长;
分别计算各个线程的线程运行时长与所述第二总使用时长之间的比值,作为各个线程对所述CPU的占用程度;
选择占用程度最高的线程,作为待检测线程。
5.一种线程死循环检测设备,其特征在于,包括存储器,收发机,处理器:
存储器,用于存储计算机程序;收发机,用于在所述处理器的控制下收发数据;处理器,用于读取所述存储器中的计算机程序并执行以下操作:
获取CPU的CPU使用信息以及运行于所述CPU的线程的线程运行信息;
基于所述CPU使用信息,计算所述CPU计算资源的使用程度;
若所述使用程度达到预设程度,则基于所述线程运行信息,确定对所述CPU的占用程度最高的线程,作为待检测线程;
将预设的测试线程的执行优先级由最低优先级调整为目标优先级,其中,所述测试线程与所述待检测线程属于同一目标进程,所述目标优先级低于所述待检测线程的执行优先级,且与所述待检测线程的执行优先级之间的差值为预设差值;
获取第一预设时长内所述测试线程的运行时长;
若所述运行时长小于第二预设时长,则确定所述待检测线程发生死循环。
6.根据权利要求5所述的设备,其特征在于,在所述确定所述待检测线程发生死循环之后,还包括:
控制所述待检测线程挂起;
若用于管理所述CPU所处设备的管理线程运行于所述CPU,且所述管理线程的执行优先级低于所述待检测线程的执行优先级,则记录所述待检测线程的任务堆栈中包含的信息,并控制复位所述设备,且控制所述CPU基于所记录的信息重新运行所述待检测线程。
7.根据权利要求5或6所述的设备,其特征在于,所述基于所述CPU使用信息,计算所述CPU计算资源的使用程度,具体包括:
基于所述CPU使用信息中包含的CPU运行时长、CPU等待时长与CPU空闲时长,计算所述CPU在第一预设时间段内的第一总使用时长;
计算所述CPU运行时长与所述第一总使用时长之间的比值,用于表示CPU计算资源的使用程度。
8.根据权利要求5或6所述的设备,其特征在于,所述基于所述线程运行信息,确定对所述CPU的占用程度最高的线程,作为待检测线程,具体包括:
基于所述线程运行信息,计算第二预设时间段内运行于所述CPU的各个线程的线程运行时长;
基于所述CPU使用信息,计算所述第二预设时间段内所述CPU的第二总使用时长;
分别计算各个线程的线程运行时长与所述第二总使用时长之间的比值,作为各个线程对所述CPU的占用程度;
选择占用程度最高的线程,作为待检测线程。
9.一种线程死循环检测装置,其特征在于,所述装置包括:
信息获取模块,用于获取CPU的CPU使用信息以及运行于所述CPU的线程的线程运行信息;
程度计算模块,用于基于所述CPU使用信息,计算所述CPU计算资源的使用程度;
线程确定模块,用于若所述使用程度达到预设程度,则基于所述线程运行信息,确定对所述CPU的占用程度最高的线程,作为待检测线程;
优先级调整模块,用于将预设的测试线程的执行优先级由最低优先级调整为目标优先级,其中,所述测试线程与所述待检测线程属于同一目标进程,所述目标优先级低于所述待检测线程的执行优先级,且与所述待检测线程的执行优先级之间的差值为预设差值;
时长获取模块,用于获取第一预设时长内所述测试线程的运行时长;
死循环确定模块,用于若所述运行时长小于第二预设时长,则确定所述待检测线程发生死循环。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1-4任一所述的方法步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111304197.4A CN116089098A (zh) | 2021-11-05 | 2021-11-05 | 一种线程死循环检测方法、设备及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111304197.4A CN116089098A (zh) | 2021-11-05 | 2021-11-05 | 一种线程死循环检测方法、设备及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116089098A true CN116089098A (zh) | 2023-05-09 |
Family
ID=86197793
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111304197.4A Pending CN116089098A (zh) | 2021-11-05 | 2021-11-05 | 一种线程死循环检测方法、设备及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116089098A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117492958A (zh) * | 2023-11-14 | 2024-02-02 | 北京智芯微电子科技有限公司 | 线程信息调整方法、装置和电子设备 |
-
2021
- 2021-11-05 CN CN202111304197.4A patent/CN116089098A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117492958A (zh) * | 2023-11-14 | 2024-02-02 | 北京智芯微电子科技有限公司 | 线程信息调整方法、装置和电子设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106681811B (zh) | 基于线程池的多线程调度方法及装置 | |
US8424007B1 (en) | Prioritizing tasks from virtual machines | |
CN107491346B (zh) | 一种应用的任务处理方法、装置及系统 | |
US8607243B2 (en) | Dynamic operating system optimization in parallel computing | |
US8713579B2 (en) | Managing job execution | |
US8601493B2 (en) | Application controlling apparatus and storage medium which stores software for the apparatus | |
Huang et al. | Implementation and evaluation of mixed-criticality scheduling approaches for sporadic tasks | |
CN112052088B (zh) | 自适应的进程cpu资源限制方法、装置、终端及存储介质 | |
CN111552614A (zh) | 一种cpu使用率的统计方法及装置 | |
JP2004326386A (ja) | 評価支援装置及び評価支援方法及び評価支援プログラム | |
CN110109741B (zh) | 循环任务的管理方法、装置、电子设备及存储介质 | |
CN102622300B (zh) | 多任务系统中死循环或类死循环的检测方法 | |
KR101203099B1 (ko) | 운영체제 태스크의 실행시간 모니터링 방법 및 시스템 | |
CN114461323A (zh) | 一种卡顿处理方法、装置、电子设备及存储介质 | |
CN116089098A (zh) | 一种线程死循环检测方法、设备及装置 | |
CN106357757B (zh) | 一种监控系统中的被监控装置及监控方法 | |
CN115422010A (zh) | 数据集群中的节点管理方法、装置及存储介质 | |
CN109284193A (zh) | 一种基于多线程的分布式数据处理方法及服务器 | |
JP2008276666A (ja) | 情報処理装置および方法、並びにプログラム | |
KR101892273B1 (ko) | 스레드 프로그레스 트래킹 방법 및 장치 | |
CN112540886B (zh) | Cpu负荷值检测方法和装置 | |
CN116880986A (zh) | 任务调度方法、装置、车载控制器、电子设备和存储介质 | |
JP2008225641A (ja) | コンピュータシステム、割り込み制御方法及びプログラム | |
CN115061792A (zh) | 任务处理方法、装置、电子设备及存储介质 | |
CN114691376A (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 |