一种对软件运行状态进行监控的方法

文档序号:6339071阅读:632来源:国知局
专利名称:一种对软件运行状态进行监控的方法
技术领域
本发明属于看门狗监控领域,尤其涉及一种对软件的运行状况进行实时监控并 自动使其恢复正常运行状态的方法。
背景技术
随着计算机软件技术的发展,一些计算机软件由于其自身功能的特殊性和重要 性,必须要求其以长期运行的情况下运行。如果因为软件自身的缺陷或者其他异常原因而 退出,则需要在无人工干预的情形下自动重启该软件,以保证其连续运行。目前对指定软件 的运行状态进行监控和恢复都还没有有效的方法,通常采用的一种方法是在指定软件自身 上增加异常时自动重启功能,即软件自身捕捉运行中产生的异常,然后执行系统API再次 启动本程序,但是这种方法并不能完全捕捉程序的异常,因此程序依然可能退出,或者即使 捕捉到异常,但是在重新启动新程序时,原有程序的进程尚未退出,从而造成同一程序运行 多个进程的问题。另外一种方法是通过第三方软件(俗称看门狗)来监视指定进程的方式实 现,但是这种方法监视的对象是在进程级,如果程序某个线程出现死锁而造成进程挂起,该 方法无法有效判断。综上两种方法都不能有效和准确的保证指定程序的连续运行。

发明内容
本发明的目的在于针对现有方法存在的不能有效判断出线程出现故障造成其所 属进程挂起的缺陷,提供一种对软件运行状态进行监控的方法。本发明是这样实现的,一种对软件运行状态进行监控的方法,包括以下步骤 创建看门狗监控程序和线程监控通用动态库;
被监控应用程序在启动后加载所述线程监控通用动态库,其各个线程分别向线程监控 通用动态库注册,线程监控通用动态库保存注册信息;
在被监控应用程序运行过程中,线程监控通用动态库实时监控各个线程当前的运行状 态并据此更新对应的运行状态维护信息;
所述线程监控通用动态库定时查询各个线程的运行状态维护信息,将其中的运行状态 维护信息未更新的线程判定为发生故障,将发生故障的线程所属的进程信息通知看门狗监 控程序,由其重新启动该进程。其中,所述线程监控通用动态库包括为看门狗监控程序提供调用接口的看门狗 调用接口模块,为被监控应用程序提供调用接口的应用程序调用接口模块,以及用以实现 注册、运行状态维护信息的更新及维护操作的注册更新维护操作模块。其中,所述被监控应用程序的各个线程向线程监控通用动态库注册的信息包括线 程的名称、线程的id号、所属进程的id号、所属进程的路径。其中,所述被监控应用程序的各个线程向线程监控通用动态库注册的信息还包 括线程更新失败次数阈值。其中,所述被监控应用程序的线程包括UI线程和工作者线程。
对于每个UI线程,其运行状态维护信息的更新过程为。UI线程定时向所述线程监控通用动态库通知其自身的运行状态。 在定时时间内,线程监控通用动态库若接收到UI线程的通知信息,则认定该UI线 程处于活动状态,更新其运行状态维护信息,将其对应的更新失败计数器值置0 ;若未接收 到UI线程的通知信息,则认定该UI线程发生异常,不更新其运行状态维护信息,将其对应 的更新失败计数器值加1。其中,所述被监控应用程序的线程包括UI线程和工作者线程。对于每个工作者线程,其运行状态维护信息更新方法为
线程监控通用动态库在该工作者线程注册时创建用以检测其状态的事件,定时置位该 事件并将其通知对应的工作者线程。该工作者线程被事件通知唤醒,将该事件复位。线程监控通用动态库在定时时间内检查该事件是否被复位,若已被复位,则判定 对应的工作者线程处于活动状态,更新其运行状态维护信息,将其对应的更新失败计数器 值置0 ;若未被复位,则判定对应的工作者线程发生异常,不更新其运行状态维护信息,将 其对应的更新失败计数器值加1。其中,所述线程监控通用动态库定时查询发生故障的线程的过程为所述线程监 控通用动态库定时轮询每个线程的运行状态维护信息,若其对应的更新失败计数器值超过 该线程在注册时存储的线程更新失败次数阈值,则判定该线程发生故障。其中,所述看门狗监控程序采用windows服务的方式进行实现。其中,所述被监控应用程序的数量为至少一个。本发明实施例与现有技术相比,有益效果在于
本发明中看门狗监控程序作为服务端、被监控应用程序作为客户端,两者通过共享线 程监控通用动态库的方式进行通信,看门狗监控程序可通过线程监控通用动态库同时监视 多个被监控应用程序中的所有线程,在线程出现故障时即重启该线程所属的进程以使其恢 复正常的运行状态,由于监视对象是在线程级,因而能够准确检测出由内部线程发生故障 引起的进程挂起的问题,有效保证了被监控应用程序的工作正常。


图1是本发明的应用方式示意图。图2是本发明实施例提供的对软件进行监控的方法流程图。图3是本发明实施例提供的UI线程的信息注册及更新流程图。图4是本发明实施例提供的工作者线程的信息注册及更新流程图。图5是本发明实施例提供的线程监控通用动态库定时轮询的工作流程图。图6是本发明实施例提供的线程监控通用动态库的具体结构图。图7是本发明实施例提供的线程监控通用动态库接受外部申请时对其维护的进 程和线程信息进行更新的序列。图8是本发明实施例提供的线程监控通用动态库在故障判断过程中进行的自维 护序列。
具体实施例方式下面将结合具体实施例和附图对本发明作进一步详细的描述。请参阅图1,本发明的核心思想为创建看门狗监控程序和线程监控通用动态库; 看门狗监控程序与被监控应用程序通过共享线程监控通用动态库的方式实现进程间通信。其中,被监控应用程序,主要负责在启动时向线程监控通用动态库注册,并定时向 其更新自己的运行状态信息,包括自身内部所有线程的运行状态信息。线程监控通用动态库,为看门狗监控程序和被监控应用程序提供通信接口,用以 保存各个线程的注册信息(包括线程名称、线程id号、所属进程id号、所述进程的路径等)、 各个线程的运行状态维护信息,实时监控各个被监控应用程序和各个线程的运行状态,根 据运行状态维护信息判断出现异常的线程,将出现异常的线程所属的进程信息通知看门狗 监控程序。看门狗监控程序,用于在收到线程监控通用动态库的通知时,重启出现异常的线 程所属的进程以恢复其正常运行状态。请参阅图2,本实施例中对软件运行状态进行监控的方法具体包括以下步骤。201、创建看门狗监控程序和线程监控通用动态库。202、各个被监控应用程序在启动后,分别加载线程监控通用动态库。203、被监控应用程序中的各个线程分别向线程监控通用动态库注册,注册信息包 括线程名称、线程id号、所属进程id号、所述进程的路径等,同时线程监控通用动态库对注 册信息进行存储。204、在被监控应用程序运行过程中,线程监控通用动态库实时监控各个线程的运 行状态,更新各个线程的运行状态维护信息。205、线程监控通用动态库定时轮询各线程的运行状态维护信息,判断其中发生故 障的线程,并将该发生故障的线程所属的进程信息通知看门狗监控程序。206、看门狗监控程序重启线程监控通用动态库通知的各进程以使其恢复正常的 运行状态。考虑到目前应用程序中的线程类型主要分为UI线程和工作者线程两种,而UI线 程和工作者线程的处理有所区别,本实施例将分开对两种线程的注册及运行状态维护信息 的更新方法进行描述。对于UI线程,如图3所示,其信息注册及更新流程为。301、在被监控应用程序启动的时候,UI线程向线程监控通用动态库中注册其自身 信息,包括线程名称、线程id号、所属进程id号、所述进程的路径、线程更新失败次数阈值等。通过注册,线程监控通用动态库可获取所有进程和线程的唯一标识,用于后期的 运行状态维护信息更新。302、在被监控应用程序运行过程中,UI线程启动其内部定时器,定时向线程监控 通用动态库通知其运行状态信息。同时,在定时时间内,线程监控通用动态库判断是否收到该UI线程的通知消息, 若接收到,则认定该UI线程处于活动状态,更新其运行状态维护信息,将其对应的更新失 败计数器值置0 ;若未接收到,则认定该UI线程发生异常,不更新其运行状态维护信息,将其对应的更新失败计数器值加1。对于工作者线程,如图4所示,其信息注册及更新流程为。401、在被监控应用程序启动的时候,工作者线程向线程监控通用动态库中注册其 自身信息,包括线程名称、线程id号、所属进程id号、所述进程的路径、线程更新失败次数 阈值等;同时,工作者线程获取线程监控通用动态库创建的用于检测该线程状态的事件句 柄。402、工作者线程进入工作过程并等待事件通知。403、在被监控应用程序运行过程中,线程监控通用动态库定时将事先提供给工作 者线程的事件置位并向对应的工作者线程发出事件通知;工作者线程被事件通知唤醒后, 将该事件复位;同时,在定时时间内,线程监控通用动态库检查上述事件是否被复位,若被 复位,则判定该工作者线程处于活动状态,更新其运行状态信息,将其对应的更新失败计数 器值置0 ;若未被置位,则判定该UI线程发生异常,不更新其运行状态维护信息,将其对应 的更新失败计数器值加1。请参阅图5,本实施例中,线程监控通用动态库定时轮询各线程的运行状态维护信 息判断其中发生故障的线程的过程包括以下步骤。501、初始化 1=1。502、根据所存储的注册信息获取第I个进程的信息,如进程id号。503、初始化 J=l。504、根据所存储的注册信息获取第I个进程的第J个线程的信息,如线程的i号 和运行状态维护信息。505、判断第I个进程的第J个线程的运行状态维护信息中更新失败计数器值是否 超过对应的线程更新失败次数阈值,若超过,则判定该线程发生故障并标记;若未超过,则 判定该线程为活动状态。506、判断是否遍历完第I个进程的所有线程,若是,则执行下一步;否则,J++,并 返回步骤504。507、判断是否遍历完所有进程,若是,则结束该流程,否则,1++,并返回步骤502。在上述方法中,各线程在注册时设置了各自的线程更新失败次数阈值,线程监控 通用动态库对各个线程采用了不同的故障判定标准;在其他实施例中,也可设置统一的线 程更新失败次数阈值,线程监控通用动态库对各个线程采用统一的故障判定标准。下面,将对本实施例中线程监控通用动态库、被监控应用程序、看门狗监控程序的 内部实现进行进一步描述。(1)线程监控通用动态库为本发明中最核心的部分,封装了所有线程的注册信息、 运行状态维护信息,主要包括三个部分看门狗调用接口模块、应用程序调用接口模块、注 册更新维护操作模块。其具体结构如图6所示,其中,TheApp为动态库主应用程序对象,负 责向外部提供需要调用的接口函数,各接口函数包括线程注册更新函数,进程注册更新函 数,事件注册函数等;CThreadPort类和CProcessObjMan类共同完成了线程运行状态维护 信息的更新和故障判断,从性能角度考虑对进程线程的维护操作采用线程对象的方式;另 外,OnTimerRefresh函数为动态库中信息维护的定时器响应函数,用于进行故障判断,并将 发生故障的线程所属的进程信息通知看门狗监控程序。如图7所示,该图为线程监控通用动态库接受外部申请时对其维护的进程和线程信息进行更新的序列,通过TheApp向外部 提供的接口函数,最终将线程信息更新到动态库中。如图8所示,该图所示为动态库在故障 判断过程中进行的自维护序列,OnTimerRefresh函数由设置的定时器驱动,定时对其维护 的进程和线程信息进行更新。(2)看门狗监控程序,相当于服务端,采用windows服务的方式实现;服务端在启 动之后需要进行初始化工作,同时考虑到线程监控通用动态库尽可能地和具体的业务逻辑 分开,因此需要服务端向动态库注册回调函数,该函数用于在线程监控通用动态库检测到 需要清理的进程时由服务端调用。服务端在完成启动及初始化之后,只需等待线程监控通 用动态库的故障通知,在接收到通知时调用预先注册的回调函数以完成进程重启的任务。( 3 )被监控应用程序端,各线程需要向线程监控通用动态库提供运行状态信息。对于UI线程,由于现有技术中线程对象都是通过CWinThread类派生,为了在实现 UI线程定时向线程监控通用动态库更新运行状态信息的功能同时不影响正常业务逻辑、减 小工作量,需要从CWinThread类派生出新的类CWDThread(在应用程序代码中,只需要将线 程类的基类修改为CWDThread即可),同时将各种操作函数封装在该新类中。对于工作者线程,无法用上面的方法实现,需要通过事件的方式来实现。由于目 前的工作者线程都是通过WaitForMultipleObjects函数来实现,因此需要添加单独创建 事件,并将事件设置成WaitForMultipleObjects函数需要等待的事件。根据资源由谁创 建就由谁回收的原则,事件由线程监控通用动态库分配提供给被监控应用程序。对于在 其他类型的操作系统中,事件等待函数需要根据具体情况进行更换,在此不仅仅局限于 WaitForMultipleObjects 函数。综上,本发明中,看门狗监控程序作为服务端、被监控应用程序作为客户端,两者 通过共享线程监控通用动态库的方式进行通信,看门狗监控程序可通过线程监控通用动态 库同时监视多个被监控应用程序中的所有线程,在线程出现故障时即重启该线程所属的进 程以使其恢复正常的运行状态。以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精 神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
权利要求
一种对软件运行状态进行监控的方法,其特征在于,该方法包括以下步骤创建看门狗监控程序和线程监控通用动态库;被监控应用程序在启动后加载所述线程监控通用动态库,其各个线程分别向线程监控通用动态库注册,线程监控通用动态库保存注册信息;在被监控应用程序运行过程中,线程监控通用动态库实时监控各个线程当前的运行状态并据此更新对应的运行状态维护信息;所述线程监控通用动态库定时查询各个线程的运行状态维护信息,将其中的运行状态维护信息未更新的线程判定为发生故障,将发生故障的线程所属的进程信息通知看门狗监控程序,由其重新启动该进程。
2.如权利要求1所述的对软件运行状态进行监控的方法,其特征在于,所述线程监控 通用动态库包括为看门狗监控程序提供调用接口的看门狗调用接口模块,为被监控应用 程序提供调用接口的应用程序调用接口模块,以及用以实现注册、运行状态维护信息的更 新及维护操作的注册更新维护操作模块。
3.如权利要求2所述的对软件运行状态进行监控的方法,其特征在于,所述被监控应 用程序的各个线程向线程监控通用动态库注册的信息包括线程的名称、线程的id号、所属 进程的id号、所属进程的路径。
4.如权利要求3所述的对软件运行状态进行监控的方法,其特征在于,所述被监控应 用程序的各个线程向线程监控通用动态库注册的信息还包括线程更新失败次数阈值。
5.如权利要求4所述的对软件运行状态进行监控的方法,其特征在于,所述被监控应 用程序的线程包括UI线程和工作者线程;对于每个UI线程,其运行状态维护信息的更新过程为UI线程定时向所述线程监控通用动态库通知其自身的运行状态;在定时时间内,线程监控通用动态库若接收到UI线程的通知信息,则认定该UI线程处 于活动状态,更新其运行状态维护信息,将其对应的更新失败计数器值置0 ;若未接收到UI 线程的通知信息,则认定该UI线程发生异常,不更新其运行状态维护信息,将其对应的更 新失败计数器值加1。
6.如权利要求4所述的对软件运行状态进行监控的方法,其特征在于,所述被监控应 用程序的线程包括UI线程和工作者线程;对于每个工作者线程,其运行状态维护信息更新方法为线程监控通用动态库在该工作者线程注册时创建用以检测其状态的事件,定时置位该 事件并将其通知对应的工作者线程;该工作者线程被事件通知唤醒,将该事件复位;线程监控通用动态库在定时时间内检查该事件是否被复位,若已被复位,则判定对应 的工作者线程处于活动状态,更新其运行状态维护信息,将其对应的更新失败计数器值置 0 ;若未被复位,则判定对应的工作者线程发生异常,不更新其运行状态维护信息,将其对应 的更新失败计数器值加1。
7.如权利要求5或6所述的对软件运行状态进行监控的方法,其特征在于,所述线程监 控通用动态库定时查询发生故障的线程的过程为所述线程监控通用动态库定时轮询每个线程的运行状态维护信息,若其对应的更新失败计数器值超过该线程在注册时存储的线程更新失败次数阈值,则判定该线程发生故障。
8.如权利要求1所述的对软件运行状态进行监控的方法,其特征在于,所述看门狗监 控程序采用windows服务的方式进行实现。
9.如权利要求1所述的对软件运行状态进行监控的方法,其特征在于,所述被监控应 用程序的数量为至少一个。
全文摘要
本发明公开了一种对软件运行状态进行监控的方法,包括以下步骤创建看门狗监控程序和线程监控通用动态库;被监控应用程序在启动后加载所述线程监控通用动态库,其各个线程分别向线程监控通用动态库注册,线程监控通用动态库保存注册信息;在被监控应用程序运行过程中,线程监控通用动态库实时监控各个线程当前的运行状态并据此更新对应的运行状态维护信息;所述线程监控通用动态库定时查询各个线程的运行状态维护信息,据此判定其中发生故障的线程,将发生故障的线程所属的进程信息通知看门狗监控程序,由其重新启动该进程。采用本发明,能够准确检测出由内部线程发生故障引起的进程挂起的问题,有效保证了被监控应用程序的工作正常。
文档编号G06F11/00GK101996106SQ201010594050
公开日2011年3月30日 申请日期2010年12月17日 优先权日2010年12月17日
发明者何恒攀, 侯腾蛟, 李庆军, 蔡洪斌, 黄巍 申请人:南京中兴力维软件有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1