CN114003498A - 软件异常检测方法、装置和电子设备 - Google Patents
软件异常检测方法、装置和电子设备 Download PDFInfo
- Publication number
- CN114003498A CN114003498A CN202111287826.7A CN202111287826A CN114003498A CN 114003498 A CN114003498 A CN 114003498A CN 202111287826 A CN202111287826 A CN 202111287826A CN 114003498 A CN114003498 A CN 114003498A
- Authority
- CN
- China
- Prior art keywords
- time
- function
- software
- detection
- target thread
- 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
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- 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/44—Arrangements for executing specific programs
- G06F9/4401—Bootstrapping
- G06F9/4418—Suspend and resume; Hibernate and awake
-
- 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/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4482—Procedural
-
- 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
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)
- Computer Security & Cryptography (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明提供了一种软件异常检测方法、装置和电子设备。其中,该方法包括:每间隔预设的时间单位唤醒目标线程;通过目标线程基于时间轮确定软件中待测函数的超时事件;执行待测函数对应的事件处理函数。该方式中,基于时间轮算法实现函数的异常检测,可以提高软件异常检测的性能,增加软件异常检测的时间精度,并且检测的性能损耗和待检测的任务数量无关,还可以支持大量的待测函数的检测。
Description
技术领域
本发明涉及软件处理的技术领域,尤其是涉及一种软件异常检测方法、装置和电子设备。
背景技术
软件在运行的过程中,本质上是在进程中开辟线程,通过函数的循环、嵌套运行来实现相关功能。一般来说,对于软件的异常检测,主要是对软件的函数运行的超时和死锁进行检测。
在功能上,上述方法只提及了超时检测和死锁检测(其实也是超时未返回的函数),检测的内容较少。
在实现方案上,上述方法用将一个函数已运行的时间维护在每个函数内部,每隔一定的周期,遍历所有的监测函数数据结构,依次对其计数器进行加1操作,如果有n个被监测的函数,则时间复杂度是O(n),而实际软件运行过程中可能有成百上千个函数需要被监测,上述方法的计算机性能损耗比较大。
在时间精确度上,因为遍历本身耗费CPU(Central Processing Unit,中央处理器)也非常消耗时间,上述方法的时间精度一般为1秒,无法做到毫秒级的时间精度,算法的性能较低,时间精度较差。
发明内容
有鉴于此,本发明的目的在于提供一种软件异常检测方法、装置和电子设备,以提高软件异常检测的性能,增加软件异常检测的时间精度,可以支持大量的待测函数的检测。
第一方面,本发明实施例提供了一种软件异常检测方法,方法包括:每间隔预设的时间单位唤醒目标线程;通过目标线程基于时间轮确定软件中待测函数的超时事件;执行待测函数对应的事件处理函数。
在本发明较佳的实施例中,上述方法还包括:在软件的初始化阶段,执行时间轮的定时器组件的初始化操作;在软件初始化完毕之后,在软件所在的进程内创建目标线程。
在本发明较佳的实施例中,上述每间隔预设的时间单位唤醒目标线程的步骤之后,方法还包括:访问指令队列并执行指令操作;其中,指令操作包括时间轮的添加定时器指令和时间轮的删除定时器指令。
在本发明较佳的实施例中,上述通过目标线程基于时间轮确定软件中待测函数的超时事件的步骤,包括:通过目标线程调用时间轮的超时事件检查接口,获取到当前时间点内待测函数的超时事件。
在本发明较佳的实施例中,上述方法还包括:确定访问指令队列并执行指令操作的步骤的第一执行时间和获取到当前时间点内待测函数的超时事件的步骤的第二执行时间;基于第一执行时间、第二执行时间和时间单位确定目标线程的睡眠时间;基于睡眠时间关闭目标线程。
在本发明较佳的实施例中,上述方法还包括:在待测函数内嵌入检测代码,基于检测代码生成待测函数的检测代理对象;基于检测代理对象确定待测函数的检测参数;其中,检测参数至少包括以下之一:接收超时时间、最大调用次数、事件处理函数名称或待测函数名称。
在本发明较佳的实施例中,上述方法还包括:在软件的去初始化阶段,执行时间轮的定时器组件的去初始化操作。
第二方面,本发明实施例还提供一种软件异常检测装置,装置包括:目标线程唤醒模块,用于每间隔预设的时间单位唤醒目标线程;超时事件确定模块,用于通过目标线程基于时间轮确定软件中待测函数的超时事件;超时事件处理模块,用于执行待测函数对应的事件处理函数。
第三方面,本发明实施例还提供一种电子设备,包括处理器和存储器,存储器存储有能够被处理器执行的计算机可执行指令,处理器执行计算机可执行指令以实现上述的软件异常检测方法的步骤。
第四方面,本发明实施例还提供一种计算机可读存储介质,计算机可读存储介质存储有计算机可执行指令,计算机可执行指令在被处理器调用和执行时,计算机可执行指令促使处理器实现上述的软件异常检测方法的步骤。
本发明实施例带来了以下有益效果:
本发明实施例提供的一种软件异常检测方法、装置和电子设备,可以通过目标线程基于时间轮确定软件中待测函数的超时事件,并执行待测函数对应的事件处理函数。该方式中,基于时间轮算法实现函数的异常检测,可以提高软件异常检测的性能,增加软件异常检测的时间精度,并且检测的性能损耗和待检测的任务数量无关,还可以支持大量的待测函数的检测。
本公开的其他特征和优点将在随后的说明书中阐述,或者,部分特征和优点可以从说明书推知或毫无疑义地确定,或者通过实施本公开的上述技术即可得知。
为使本公开的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种软件异常检测方法的流程图;
图2为本发明实施例提供的另一种软件异常检测方法的流程图;
图3为本发明实施例提供的一种异常检测装置的结构示意图;
图4为本发明实施例提供的另一种异常检测装置的结构示意图;
图5为本发明实施例提供的另一种异常检测装置的结构示意图;
图6为本发明实施例提供的一种电子设备的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
目前,现有的软件异常检测方法存在下述问题:
(1)功能上,只提及了超时检测、死锁检测(其实也是超时未返回的函数),没有提及调用次数检测;
(2)实现方案上,根据上述方案描述比较低效,上述方案没有使用时间轮算法,而是用将一个函数已运行的时间维护在每个函数内部,每隔一定的周期,遍历所有的监测函数数据结构,依次对其计数器进行加1操作,如果有n个被监测的函数,则时间复杂度是O(n),随着注册函数的数量增加线性增加,而本方案提供的时间轮算法,最差时间复杂度是O(1),和当前注册的函数数量无关。而实际软件运行过程中可能有成百上千个函数需要被监测,因此本方案带来的性能收益很大。
(3)在时间精确度上,上述方案描述中推荐的1秒,实际上根据其方案算法性能较低的现实,无法做到毫秒级的时间精度,因为遍历本身耗费CPU也消耗时间,而本方案可以做到毫秒级的时间精确度。绝大多数的函数运行耗时在毫秒级,秒级的精度往往检测不到或者会遗漏很多函数执行的异常。因此提升时间精度,对于函数运行异常监测能够带来很大的正收益。
基于此,本发明实施例提供的一种软件异常检测方法、装置和电子设备,具体涉及一种基于用户态时间轮的软件运行时异常检测方法、装置和电子设备,可以针对函数运行提供一个通用的自动检测运行异常的方法,通过识别是否函数在约定时间内未返回、约定时间内同一函数调用次数是否超过阈值、实现函数运行异常的检测,进而实现软件运行时的异常感知。
具体地,函数运行时异常中的超时异常部分,成百上千个函数需要检测时计算机性能损耗比较大的问题将会得到解决;函数运行时异常中的超时异常部分,检测的时间精度将会得到解决,可以达到毫秒级;函数运行时的异常检测,除了提供超时检测外,还提供函数调用次数的检测、函数执行耗时的检测报告(执行平均时间、执行时间的方差和标准差)。
为便于对本实施例进行理解,首先对本发明实施例所公开的一种软件异常检测方法进行详细介绍。
实施例一:
本实施例提供了一种软件异常检测方法,参见图1所示的一种软件异常检测方法的流程图,该软件异常检测方法包括如下步骤:
步骤S102,每间隔预设的时间单位唤醒目标线程。
本发明实施例可以在软件初始化的同时初始化时间轮的定时器组件。并且,在上述两个初始化圈闭完毕之后,可以在软件所在的进程内开辟一个线程,称为目标线程。目标线程每间隔预设的时间单位唤醒,时间单位可以为1-2毫秒,用于执行软件的异常检查操作。
步骤S104,通过目标线程基于时间轮确定软件中待测函数的超时事件。
时间轮是为解决高效调度任务而产生的调度模型,通常由哈希表和链表为数据结构,应用场景主要在延迟大规模的延时任务、周期性的定时任务等。
待测函数为软件中需要进行异常检测的函数,待测函数在运行过程中可以能会出现函数运行超时的事件,称为待测函数的超时事件。
步骤S106,执行待测函数对应的事件处理函数。
每个待测函数均对应有事件处理函数,如果待测函数存在超时事件,就可以执行待测函数对应的事件处理函数,以处理上述超时事件。
另外需要说明的是,异常检查操作除了可以确定软件中待测函数的超时事件,执行待测函数对应的事件处理函数之外,还具有添加、删除定时器任务,确定目标线程对应的时间等功能。
本发明实施例提供的一种软件异常检测方法,可以通过目标线程基于时间轮确定软件中待测函数的超时事件,并执行待测函数对应的事件处理函数。该方式中,基于时间轮算法实现函数的异常检测,可以提高软件异常检测的性能,增加软件异常检测的时间精度,并且检测的性能损耗和待检测的任务数量无关,还可以支持大量的待测函数的检测。
实施例二:
本实施例提供了另一种软件异常检测方法,该方法在上述实施例的基础上实现;参见图2所示的另一种软件异常检测方法的流程图,该软件异常检测方法包括如下步骤:
步骤S202,每间隔预设的时间单位唤醒目标线程。
时间轮是本实施例提供的方法实现的基础,因此先介绍时间轮。时间轮是一个类似于时钟的定时器,本实施例的时间轮提供添加超时事件、删除超时事件,检查当前时间点是否有存在已经超时的事件三项功能。时间轮的精度和最大可设置的超时时间可以根据实际需要动态调整,根据本实施例需要,将实现一个时间精度为1毫秒,最大超时时间为1分钟的时间轮(因为很少有函数运行超过1分钟不返回仍然属于正常现象的)。
首先,可以通过下述步骤进行初始化:在软件的初始化阶段,执行时间轮的定时器组件的初始化操作;在软件初始化完毕之后,在软件所在的进程内创建目标线程。
在时间轮程序初始化的时候,初始化时间轮。在初始化过程中,将申请一个60×1000的数组(60代表1分钟有60秒,1000代表每秒有1000个毫秒,形成一个支持6万个元素的槽位),同时获取一个当前系统时间点,精确到毫秒,以及一个当前时间指针(毫秒级时间指针),初始化时指向第一格,即数组索引为0的位置。
步骤S204,通过目标线程基于时间轮确定软件中待测函数的超时事件。
步骤S206,执行待测函数对应的事件处理函数。
目标线程可以执行软件的异常检查操作,具体包括:
(1)访问一次指令队列,执行指令操作(包括添加、删除定时器任务两个指令)。即,访问指令队列并执行指令操作;其中,指令操作包括时间轮的添加定时器指令和时间轮的删除定时器指令。
(2)调用一次时间轮的超时事件检查接口,获取到当前时间点为止的所有超时事件。即,通过目标线程调用时间轮的超时事件检查接口,获取到当前时间点内待测函数的超时事件。
(3)如果存在超时的事件队列中存在超时事件,则执行对应的事件处理函数。
(4)根据当前实际时间点,决定本次睡眠的时间(例如时间单位设置为1毫秒,而(1)(2)(3)步骤如果总共执行了0.5毫秒,则本次睡眠时间设置为0.5毫秒,睡眠时间根据实际执行时间动态调整)。即,确定访问指令队列并执行指令操作的步骤的第一执行时间和获取到当前时间点内待测函数的超时事件的步骤的第二执行时间;基于第一执行时间、第二执行时间和时间单位确定目标线程的睡眠时间;基于睡眠时间关闭目标线程。
下面对时间轮除了初始化以外的功能进行详细说明:
添加定时器事件:定时器超时事件添加者需要提供超时时长(毫秒)、超时后的处理函数两个参数。添加过程中,时间轮会先获取当前系统时间点(毫秒),加上时间轮用户提供的超时时长,得到一个超时时间点。用该超时时间点和当前时间轮记录的时间点做减法,得到一个偏移量,基于该偏移量,找到对应的槽位。将用户的信息(超时处理函数、超时时间间隔等)生成一个超时上下文数据结构,将超时上下文以双向链表的方式挂载到该槽位的尾部,完成添加定时触发事件操作。同时将该超时上下文的地址返回给用户,由用户在外部保存该地址。时间复杂度为O(1)。由于多个线程都有可能在运行过程中调用该接口,因此实现为异步的形式,下文将描述异步接口实现方法。
删除定时器事件:删除定时事件,仅需要将超时上下文的双向链表的头指针和尾指针拼接,并释放超时上下文的内存即可完成定时触发事件的删除操作,时间复杂度为O(1)。由于多个线程都有可能在运行过程中调用该接口,因此实现为异步的形式,下文将描述异步接口实现方法。
检查当前时间点的超时事件:获取当前系统时间点(毫秒),和时间轮上一次保存的系统时间点相减,得到时间间隔(毫秒)。根据时间间隔,依次移动当前的毫秒级时间指针到每个槽位,获取每个槽位上挂载的超时上下文双向链表,并将得到的链表首尾相接,即得到一个完成的超时事件链表。获取完毕后,重新设置时间轮保存的时间点为当前时间点。如果1毫秒检查一次,那么时间复杂度为O(1),也可以多个毫秒检查一次,那么时间复杂度也只和间隔的毫秒数有关,和挂载的超时任务数量无关。
去初始化:一次释放槽位内存、释放超时上下文内存、释放整个时间轮的上下文即可。
添加周期性超时定时器:在定时器超时事件处理函数中,重新注册一个新的定时器即可。
根据上文描述,添加超时事件、删除超时事件可能在多个线程中同时发送,可能会产生条件竞争,并发度较高时会造成较大的性能损耗。本实施例中的这两个接口,实现成异步的形式。具体的实现方案是:提供一个无锁的多写一读的无锁队列组件,调用添加超时事件接口时,并不真正的执行上述的接口实现逻辑,而是将一条指令和相应的参数生成一个指令上下文,放到先入先出的多写一读的无锁队列中。删除超时事件接口也采用同样的方式实现,这样可以避免条件竞争带来的损耗。具体的指令执行则放在一个专门的线程中,将在下文描述,执行的具体逻辑已在上文介绍接口的时候描述。
步骤S208,在待测函数内嵌入检测代码,基于检测代码生成待测函数的检测代理对象;基于检测代理对象确定待测函数的检测参数。
其中,检测参数至少包括以下之一:接收超时时间、最大调用次数、事件处理函数名称或待测函数名称。具体地,可以在需要检测的函数内第一行,嵌入一行检测代码,生成一个检测代理对象。该对象接收超时时间(毫秒)、最大调用次数、事件处理函数名称、待测函数名称4个参数。
基于以上描述的时间轮算法,无锁异步接口,结合C++自带的RAII(Resourceacquisition is initialization,资源生成时即初始化)机制,即可实现4大功能。
RAII机制简介:如果在函数一开始申明一个局部变量,那么在函数执行时,会首先调用该变量的构造函数,并且在函数退出时,会自动调用该变量的析构函数。
因此本实施例的实现思路就是提供一个代理类,该类提供构造函数、析构函数和一系列的事件处理函数。在构造函数中,执行注册时间轮的超时事件操作,因为构造函数代表了进入某个函数执行。在析构函数中执行去注册时间轮的超时事件操作。因为析构函数代表了函数即将退出。
具体的功能实现:
运行超时、死锁超时功能,用户提供函数的超时时间阈值,在代理类的构造函数中,注册定时器超时事件,当超过阈值时,在超时事件处理逻辑中打印相关异常告警信息。
函数执行时间统计功能,设置一个函数耗时统计的全局数据结构,记录每个函数的每次执行耗时,在代理对象的构造函数中记录进入时间点,在析构函数中记录退出时间点,从而得到函数的执行时间,在析构函数中将该时间点存储到全局数据结构中方便后面统计,在统计时,根据全局数据结构进行统计。
调用次数统计功能,注册一个周期性超时的定时器和一个全局数据结构用于记录单位时间内各函数的调用次数,每个代理类生成的构造函数中,对函数的调用次数计数器进行加1操作,如果超过阈值,则输出告警信息。每次周期性超时后,对所有的函数调用次数计数器进行清零操作。
此外,在软件去初始化阶段,执行时间轮组件的去初始化操作,例如:在软件的去初始化阶段,执行时间轮的定时器组件的去初始化操作。
本发明实施例提供的上述方法,基于时间轮算法实现函数的异常检测,做到了检测性能的提升,做到了检测的性能损耗和待检测的任务数量无关,支持大量的待测函数的检测;实现了函数超时异常、死锁异常、调用次数异常的检测;实现函数的运行时的性能统计,可以进一步从性能报告中发现异常;采用异步注册、去注册定时器的接口,避免函数在多个线程中同时执行,都需要注册到时间轮、或者从时间轮去注册时的条件竞争对执行性能的影响。
该方式中,基于时间轮算法的超时机制做到了检测带来的损耗和实际待检测的任务数量无关,因此本实施例提供的方法从原理上,支持超大量的函数检测,这也更加符合实际的使用场景,绝大多数的软件运行过程中都在运行着大量的函数。本实施例利用C++的RAII机制,实现了使用上的易用性,只需要一行代码即可给自己的函数加上运行时检测功能。提供了多项检测能力,包括性能异常、调用次数异常的检测和信息的统计。本实施例提供的方法和操作系统无关,由于是在用户态实现的定时器算法,因此和操作系统无关,具有比较好的适用性。
实施例三:
对应于上述方法实施例,本发明实施例提供了一种软件异常检测装置,参见图3所示的一种异常检测装置的结构示意图,该异常检测装置包括:
目标线程唤醒模块31,用于每间隔预设的时间单位唤醒目标线程;
超时事件确定模块32,用于通过目标线程基于时间轮确定软件中待测函数的超时事件;
超时事件处理模块33,用于执行待测函数对应的事件处理函数。
本发明实施例提供的一种软件异常检测装置,可以通过目标线程基于时间轮确定软件中待测函数的超时事件,并执行待测函数对应的事件处理函数。该方式中,基于时间轮算法实现函数的异常检测,可以提高软件异常检测的性能,增加软件异常检测的时间精度,并且检测的性能损耗和待检测的任务数量无关,还可以支持大量的待测函数的检测。
参见图4所示的另一种异常检测装置的结构示意图,该异常检测装置还包括:初始化模块34,与目标线程唤醒模块31连接,初始化模块34用于在软件的初始化阶段,执行时间轮的定时器组件的初始化操作;在软件初始化完毕之后,在软件所在的进程内创建目标线程。
如图4所示,上述异常检测装置还包括:指令队列访问模块35,与目标线程唤醒模块31连接,指令队列访问模块35用于访问指令队列并执行指令操作;其中,指令操作包括时间轮的添加定时器指令和时间轮的删除定时器指令。
上述超时事件确定模块,用于通过目标线程调用时间轮的超时事件检查接口,获取到当前时间点内待测函数的超时事件。
如图4所示,上述异常检测装置还包括:目标线程睡眠模块36,与超时事件确定模块32连接,目标线程睡眠模块36用于确定访问指令队列并执行指令操作的步骤的第一执行时间和获取到当前时间点内待测函数的超时事件的步骤的第二执行时间;基于第一执行时间、第二执行时间和时间单位确定目标线程的睡眠时间;基于睡眠时间关闭目标线程。
参见图5所示的另一种异常检测装置的结构示意图,该异常检测装置还包括:检测参数确定模块37,与目标线程唤醒模块31连接,检测参数确定模块37用于在待测函数内嵌入检测代码,基于检测代码生成待测函数的检测代理对象;基于检测代理对象确定待测函数的检测参数;其中,检测参数至少包括以下之一:接收超时时间、最大调用次数、事件处理函数名称或待测函数名称。
如图4所示,上述异常检测装置还包括:去初始化模块38,与超时事件确定模块32连接,去初始化模块38用于在软件的去初始化阶段,执行时间轮的定时器组件的去初始化操作。
本发明实施例提供的软件异常检测装置,与上述实施例提供的软件异常检测方法具有相同的技术特征,所以也能解决相同的技术问题,达到相同的技术效果。
实施例四:
本发明实施例还提供了一种电子设备,用于运行上述软件异常检测方法;参见图6所示的一种电子设备的结构示意图,该电子设备包括存储器100和处理器101,其中,存储器100用于存储一条或多条计算机指令,一条或多条计算机指令被处理器101执行,以实现上述软件异常检测方法。
进一步地,图6所示的电子设备还包括总线102和通信接口103,处理器101、通信接口103和存储器100通过总线102连接。
其中,存储器100可包含高速随机存取存储器(RAM,Random Access Memory),也可还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。通过至少一个通信接口103(可以是有线或者无线)实现该系统网元与至少一个其他网元之间的通信连接,可以使用互联网,广域网,本地网,城域网等。总线102可以是ISA总线、PCI总线或EISA总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图6中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
处理器101可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器101中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器101可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(DigitalSignal Processor,简称DSP)、专用集成电路(Application Specific IntegratedCircuit,简称ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器100,处理器101读取存储器100中的信息,结合其硬件完成前述实施例的方法的步骤。
本发明实施例还提供了一种计算机可读存储介质,该计算机可读存储介质存储有计算机可执行指令,该计算机可执行指令在被处理器调用和执行时,计算机可执行指令促使处理器实现上述软件异常检测方法,具体实现可参见方法实施例,在此不再赘述。
本发明实施例所提供的软件异常检测方法、装置和电子设备的计算机程序产品,包括存储了程序代码的计算机可读存储介质,程序代码包括的指令可用于执行前面方法实施例中的方法,具体实现可参见方法实施例,在此不再赘述。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和/或装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
另外,在本发明实施例的描述中,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,电子设备,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
在本发明的描述中,需要说明的是,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性。
最后应说明的是:以上所述实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
Claims (10)
1.一种软件异常检测方法,其特征在于,所述方法包括:
每间隔预设的时间单位唤醒目标线程;
通过所述目标线程基于时间轮确定软件中待测函数的超时事件;
执行所述待测函数对应的事件处理函数。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在所述软件的初始化阶段,执行所述时间轮的定时器组件的初始化操作;
在所述软件初始化完毕之后,在所述软件所在的进程内创建所述目标线程。
3.根据权利要求1所述的方法,其特征在于,每间隔预设的时间单位唤醒目标线程的步骤之后,所述方法还包括:
访问指令队列并执行指令操作;其中,所述指令操作包括所述时间轮的添加定时器指令和所述时间轮的删除定时器指令。
4.根据权利要求3所述的方法,其特征在于,通过所述目标线程基于时间轮确定软件中待测函数的超时事件的步骤,包括:
通过所述目标线程调用所述时间轮的超时事件检查接口,获取到当前时间点内待测函数的超时事件。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
确定所述访问指令队列并执行指令操作的步骤的第一执行时间和所述获取到当前时间点内待测函数的超时事件的步骤的第二执行时间;
基于所述第一执行时间、所述第二执行时间和所述时间单位确定目标线程的睡眠时间;
基于所述睡眠时间关闭所述目标线程。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在待测函数内嵌入检测代码,基于所述检测代码生成所述待测函数的检测代理对象;
基于所述检测代理对象确定待测函数的检测参数;其中,所述检测参数至少包括以下之一:接收超时时间、最大调用次数、事件处理函数名称或待测函数名称。
7.根据权利要求2所述的方法,其特征在于,所述方法还包括:
在所述软件的去初始化阶段,执行所述时间轮的定时器组件的去初始化操作。
8.一种软件异常检测装置,其特征在于,所述装置包括:
目标线程唤醒模块,用于每间隔预设的时间单位唤醒目标线程;
超时事件确定模块,用于通过所述目标线程基于时间轮确定软件中待测函数的超时事件;
超时事件处理模块,用于执行所述待测函数对应的事件处理函数。
9.一种电子设备,其特征在于,包括处理器和存储器,所述存储器存储有能够被所述处理器执行的计算机可执行指令,所述处理器执行所述计算机可执行指令以实现权利要求1-7任一项所述的软件异常检测方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令在被处理器调用和执行时,所述计算机可执行指令促使处理器实现权利要求1-7任一项所述的软件异常检测方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111287826.7A CN114003498A (zh) | 2021-11-02 | 2021-11-02 | 软件异常检测方法、装置和电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111287826.7A CN114003498A (zh) | 2021-11-02 | 2021-11-02 | 软件异常检测方法、装置和电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114003498A true CN114003498A (zh) | 2022-02-01 |
Family
ID=79926605
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111287826.7A Pending CN114003498A (zh) | 2021-11-02 | 2021-11-02 | 软件异常检测方法、装置和电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114003498A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116503973A (zh) * | 2023-06-20 | 2023-07-28 | 厦门星拉科技有限公司 | 基于电力物联网的电力设备智能巡检系统及方法 |
-
2021
- 2021-11-02 CN CN202111287826.7A patent/CN114003498A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116503973A (zh) * | 2023-06-20 | 2023-07-28 | 厦门星拉科技有限公司 | 基于电力物联网的电力设备智能巡检系统及方法 |
CN116503973B (zh) * | 2023-06-20 | 2023-08-29 | 厦门星拉科技有限公司 | 基于电力物联网的电力设备智能巡检系统及方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2020512613A5 (zh) | ||
CN109976935B (zh) | 微服务架构、微服务节点及其熔断恢复方法、装置 | |
KR102028663B1 (ko) | 에러 검출 방법 및 장치 | |
US9128749B1 (en) | Method and system for lock free statistics collection | |
CN114003498A (zh) | 软件异常检测方法、装置和电子设备 | |
CN106775620B (zh) | 一种定时方法及装置 | |
EP3042287A1 (en) | Rootkit detection in a computer network | |
US10642342B2 (en) | Predicting voltage guardband and operating at a safe limit | |
US8943303B2 (en) | Monitoring circuit with a window watchdog | |
US20140149968A1 (en) | Dynamic library profiling method and dynamic library profiling system | |
CN107423206B (zh) | 一种衡量系统管理中断时间的方法及装置 | |
CN110134219B (zh) | 应用程序后台耗电处理方法及装置 | |
CN109491771B (zh) | 基于系统性能优化的任务处理方法及相关设备 | |
CN109213589B (zh) | 一种消息处理的方法及装置 | |
CN116541239A (zh) | 一种定时任务监控方法、装置、电子设备及存储介质 | |
JP2005215816A (ja) | ハードウェアモニタを用いた性能プロファイリング方法 | |
CN112540886B (zh) | Cpu负荷值检测方法和装置 | |
KR20120003088A (ko) | 결정적 프로그레스 인덱스를 이용한 스레드 프로그레스 트래킹 방법 및 장치 | |
CN115617475A (zh) | 循环闹钟设置方法、装置、电子设备及存储介质 | |
CN114253825A (zh) | 内存泄漏检测方法、装置、计算机设备和存储介质 | |
CN112650646A (zh) | 一种并发任务超时监控方法、装置及电子设备 | |
JP2009217385A (ja) | プロセッサ及びマルチプロセッサ | |
WO2011039577A1 (en) | Memory access performance diagnosis | |
CN111597016B (zh) | 一种系统任务的时间保护方法、系统、存储介质及终端 | |
KR101507353B1 (ko) | 모바일 디바이스의 메모리를 관리하는 방법, 서버 및 컴퓨터 판독 가능한 기록 매체 |
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 |