公开/公告号CN101980171A
专利类型发明专利
公开/公告日2011-02-23
原文格式PDF
申请/专利权人 广东威创视讯科技股份有限公司;
申请/专利号CN201010503342.7
申请日2010-10-08
分类号G06F11/07(20060101);
代理机构44224 广州华进联合专利商标代理有限公司;
代理人王茹;曾旻辉
地址 510663 广东省广州市广州高新技术产业开发区彩频路6号
入库时间 2023-12-18 01:52:15
法律状态公告日
法律状态信息
法律状态
2019-09-13
专利权人的姓名或者名称、地址的变更 IPC(主分类):G06F11/07 变更前: 变更后: 申请日:20101008
专利权人的姓名或者名称、地址的变更
2013-05-01
授权
授权
2011-04-06
实质审查的生效 IPC(主分类):G06F11/07 申请日:20101008
实质审查的生效
2011-02-23
公开
公开
技术领域
本发明涉及一种软件系统故障自恢复方法及其使用的软件看门狗系统。
背景技术
在软件系统的运行过程中,常常会发生异常而导致系统发生崩溃,如内存读写冲突、非法除0、堆栈溢出或越界、句柄无效、数组越界、系统陷入死循环等。对于一些实时性要求较高的应用场景来说,在软件系统发生异常时能够快速的完成自恢复是非常重要的。尤其是对于一些运行在服务器端的软件系统,由于其发生异常甚至崩溃时不易被发现,这就更要求其具有故障自恢复的功能。
现有的实现软件系统故障自恢复的方法一般采用软件看门狗技术,其实现原理是:软件看门狗定时查询被监视软件系统的运行状态,定时向被监视软件系统发送查询请求,被监视的软件系统在接收到查询请求后立即返回一条应答消息,若软件看门狗在发送查询命令后的T时间内(T为查询超时时限)没有收到该应答消息,则认为该被监视的软件系统发生了异常,立即结束该软件系统的运行并将其重新启动。
该方法虽然简单易行,且也比较可靠,但该方法不适用于实时性要求高的场景,因为该方法中软件看门狗对软件系统运行状态的监视是通过定时查询来完成的,所以当被监视的软件系统发生崩溃导致自行退出时,软件看门狗需要一定的时间周期才能够监视到。
发明内容
本发明提出了一种实现软件系统故障自恢复的方法,用以解决当软件系统发生异常导致崩溃时能够迅速恢复运行的问题。
一种软件系统故障自恢复方法,采用的具体技术方案,包括步骤如下:
步骤一、被监视的软件系统定时向软件看门狗发送心跳包,所述软件看门狗接收并读取所述心跳包;
步骤二、所述软件看门狗通过进程同步机制和以无限期等待的方式监视所述被监视的软件系统的退出,并根据被监视的软件系统的退出情况作相应操作。
其中,步骤一前还包括以阻塞的方式建立所述软件看门狗与所述被监视的软件系统之间通信的通信通道的步骤,所述软件看门狗为通信通道的服务端,所述被监视的软件系统为通信通道的客户端。
其中,所述软件看门狗若在预设的时长内连续没有收到心跳包的次数或连续读取心跳包失败的次数超过预设的阈值,则立即强制结束所述被监视的软件系统。
其中,被监视的软件系统退出时,生成相应的退出码:若被监视的软件系统正常退出,则生成的退出码为0;若被监视的软件系统为非正常退出,则生成的退出码为非0。
其中,软件看门狗通过进程同步机制和以无限期等待的方式监视到软件系统退出时,软件看门狗获取被监视的软件系统的退出码,并判断该软件系统的退出情况:若所述退出码为0,则被监视的软件系统为正常退出;若所述退出码为非0,则被监视的软件系统为非正常退出。
其中,所述根据被监视的软件系统的退出情况作相应操作,具体包括:若被监视的软件系统是正常退出,则软件看门狗取消对该被监视的软件系统的监视;若被监视的软件系统是非正常退出,则软件看门狗重启该被监视的软件系统。
一种软件看门狗系统,包括:主模块,用于读取被监视的软件系统信息并将该信息发送给启动软件系统模块;启动软件系统模块,用于接收所述被监视的软件系统信息和重启所述被监视的软件系统的消息,并启动所述被监视的软件系统的运行;
还包括:
心跳包接收模块,用于根据接收到的同步等待模块发送的已经退出的被监视的软件系统消息,判断被监视的软件系统是否已经退出,若否,则接收并读取所述被监视软件系统定时发送的心跳包,若是,则取消接收该被监视的软件系统发送的心跳包;
同步等待模块,用于通过进程同步机制和以无限期等待的方式监视所述被监视的软件系统的退出,并以异步的方式将已经退出的被监视的软件系统消息发送给心跳包接收模块和第二判断模块;
第二判断模块,用于根据接收到的所述同步等待模块发送的已经退出的被监视的软件系统消息,判断所述被监视的软件系统的退出情况,若是非正常退出,则向启动软件系统模块发送一条重启被监视的软件系统的指令。
其中,所述心跳包接收模块还用于以阻塞的方式创建用于与所述被监视的软件系统进行通信的通信通道。
其中,所述已经退出的被监视的软件系统消息,包括已经退出的被监视软件系统以及对应的退出码。
所述软件看门狗系统,还包括:
第一判断模块,用于根据心跳包接收模块在预设的时长内连续没有收到心跳包的次数或连续读取心跳包失败的次数与预设的阈值的比较情况,判断所述被监视的软件系统是否发生异常,若是,则向结束软件系统模块发送一条结束所述被监视的软件系统的消息,若否,则继续接收所述被监视的软件系统发送的心跳包;
结束软件系统模块,用于接收第一判断模块发送的结束所述被监视的软件系统的消息,强制结束所述被监视的软件系统。
本发明提出的一种软件系统故障自恢复方法,软件看门狗通过进程同步机制和以无限期等待的方式监视软件系统的退出,所以当被监视的软件系统发生异常导致崩溃而自行退出时,软件看门狗可以实时地监视到从而重启该软件系统,解决当软件系统崩溃自行退出时现有技术实时性不够的问题。
附图说明
图1为软件系统故障自恢复方法实施例一的流程图;
图2为软件看门狗实施例一的结构示意图;
图3为软件系统故障自恢复方法实施例二的流程图;
图4为软件看门狗实施例二的结构示意图;
图5为软件看门狗实施例二的心跳包接收模块、第一判断模块和结束软件系统模块的流程图。
具体实施方式
实施例一
一种软件系统故障自恢复方法,如图1,包括以下步骤:
步骤一、软件看门狗以阻塞的方式建立用于与被监视的软件系统进行通信的通信通道,所述软件看门狗为通信通道的服务端,所述被监视的软件系统为通信通道的客户端;
步骤二、被监视的软件系统定时向软件看门狗发送心跳包,软件看门狗接收并读取所述被监视的软件系统定时发送的心跳包;
步骤三、软件看门狗通过进程同步机制和以无限期等待的方式监视软件系统的退出,在监视到软件系统退出时,根据获取到的被监视的软件系统的退出码来判断被监视的软件系统是否正常退出并作相应的操作:
若获取到的被监视的软件系统的退出码为0,则表示被监视的软件系统正常退出,软件看门狗取消对该被监视的软件系统的监控;若获取到的被监视的软件系统的退出码为非0,则表示被监视的软件系统非正常退出,软件看门狗重启该被监视的软件系统;
例如,当被监视的软件系统发生异常导致崩溃而自行退出时,由于软件看门狗通过进程同步机制并以无限期等待的方式监视软件系统的退出,所以软件看门狗立即检测到软件系统已经退出,获取到的被监视的软件系统的退出码为非0,则软件看门狗立即重启该软件系统。
一种软件看门狗系统,如图2,包括:
主模块,用于读取被监视的软件系统信息并将该信息发送给启动软件系统模块;
启动软件系统模块,用于接收主模块发送的所述被监视的软件系统信息和第二判断模块发送的重启所述被监视的软件系统的消息,并启动所述被监视的软件系统的运行;
心跳包接收模块,用于以阻塞的方式等待所述被监视的软件系统的通信通道连接请求,根据接收的同步等待模块发送的所述已经退出的被监视软件系统消息,检测被监视软件系统是否已经退出,若否,被监视的软件系统的通信通道连接请求到达后,接收并读取所述被监视软件系统定时发送的心跳包,若是,则取消接收该被监视的软件系统发送的心跳包;
同步等待模块,用于通过进程同步机制和以无限期等待的方式监视所述被监视的软件系统的退出,并以异步的方式将已经退出的被监视的软件系统消息发送给心跳包接收模块和第二判断模块;
第二判断模块,用于根据接收到的所述同步等待模块发送的已经退出的被监视的软件系统消息,判断所述被监视的软件系统的退出情况,若是非正常退出,则向启动软件系统模块发送一条重启所述被监视的软件系统的消息。
其中,所述已经退出的被监视的软件系统消息,包括已经退出的被监视软件系统以及对应的退出码。
实施例二
鉴于现有技术还有可靠性不够的缺点:如当被监视软件系统在运行一个较为耗时的计算时,因为软件看门狗在规定的时间内只进行一次查询,所以在这种情形下该软件系统不能及时响应,此时若判定该被监视软件系统发生了异常并将其重启,可能会带来一些相关的附加问题;为解决被监视软件系统运行耗时计算时可能出现的误判问题,在实施例一的步骤二后增加以下步骤:
软件看门狗根据读取所述被监视软件系统定时发送的心跳包情况监视该软件系统的运行状态:若软件看门狗在预设的时长内连续没有收到心跳包或读取心跳包失败的次数超过阈值,则立即强制结束该被监视的软件系统。
例如本实施例中,当被监视的软件系统发生异常不能正常工作但还在运行时,如出现死锁等这样的情况时,预设的时长为3s,阈值N为5,当软件看门狗在3s内连续读取心跳包失败的次数或连续没有接收到心跳包的次数I为6次时,这时软件看门狗认为被监视的软件系统发生了异常,立即强制结束该被监视的软件系统。
其他步骤与实施例一相同,本实施例的软件系统故障自恢复方法的流程图如图3,软件看门狗设定在规定时长内允许的连续读取心跳包错误的次数或连续没有接收到心跳包的次数,保证被监视的软件系统在进行耗时计算时也有比较充足的时间向软件看门狗发送心跳包,解决了现有技术可靠性不够的问题。
同样为了解决现有技术可靠性不够的缺点,即软件系统运行耗时计算时可能出现的误判问题,所述软件看门狗在实施例一的模块基础上增加以下模块:
第一判断模块,用于根据心跳包接收模块在预设的时长内连续没有收到心跳包的次数或连续读取心跳包失败的次数与预设的阈值的比较情况,判断所述被监视的软件系统是否发生异常,若是,则向结束软件系统模块发送一条结束所述被监视的软件系统的消息,若否,则继续接收所述被监视的软件系统发送的心跳包;
结束软件系统模块,用于接收第一判断模块发送的结束所述被监视的软件系统的消息,强制结束所述被监视的软件系统。
其他模块与实施例一的模块相同,本实施例的软件看门狗的模块结构如图4,该软件看门狗的具体信号流程如下:
1)主模块读取被监视的软件系统信息并将该信息发送给启动软件系统模块;
2)启动软件系统模块根据接收到的主模块发送的被监视软件系统信息,启动被监视的软件系统的运行;
3)如图5,心跳包接收模块首先以阻塞的方式等待被监视的软件系统的通信通道连接请求,并根据同步等待模块发送的所述已经退出的被监视软件系统消息,检测被监视的软件系统是否退出,若是,则取消接收该被监视软件系统的心跳包,若否,则被监视的软件系统的通信通道连接请求到达后,接收并读取所述被监视软件系统定时发送的心跳包,并将读取情况发送到第一判断模块;
第一判断模块根据接收到的心跳包读取情况,判断所述被监视的软件系统是否发生异常:假设软件看门狗在预设的时长内连续没有收到心跳包的次数或连续读取心跳包失败的次数为I并初始化为0,如果读取成功,则将I重新设置为0,并返回到心跳包接收模块检测被监视的软件系统是否退出步骤;如果读取失败,则I加1,当I<阈值N时,则返回到心跳包接收模块检测被监视的软件系统是否退出步骤,当I>N时,则向结束软件系统模块发送结束该被监视软件系统的消息,结束软件系统模块立即强制结束该软件系统;
4)同步等待模块通过进程同步机制和以无限期等待的方式监视软件系统的退出,并以异步的方式将已经退出的被监视软件系统消息发送给心跳包接收模块和第二判断模块;该已经退出的被监视软件系统消息,包括已经退出的被监视软件系统以及对应的退出码;
5)第二判断模块根据接收到的同步等待模块发送的已经退出的被监视软件系统消息,根据退出码判断软件系统的退出情况,若该被监视的软件系统为非正常退出,则向启动软件系统模块发送一条重启该软件系统的消息,启动软件系统模块重启该软件系统的运行,若该被监视的软件系统为正常退出,则取消对该被监视软件系统的监视。
以上所述的本发明实施方式,并不构成对本发明保护范围的限定。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明的权利要求保护范围之内。
机译: 软件确定方法,软件使用方法,记录介质处理设备,软件保护方法,另一种介质中的软件移植方法,软件控制方法,图形处理创建方法,图形处理方法托板功能,确定托板面积的方法,均质矢量创建方法,托板功能创建方法,创建相位元素的方法,创建逻辑元素的方法,创建有效动作的方法,软件部署,软件改进方法,数据结构替换方法,数据值替换,上一代软件分析方法,软件开发过程的控制,
机译: 使用/管理系统的软件以及使用/管理控制方法的软件以及使用/管理控制系统和集成软件的软件/使用/管理方法和使用/管理方法的软件
机译: 使用/管理系统的软件以及使用/管理控制方法的软件以及使用/管理控制系统和集成软件的软件/使用/管理方法和使用/管理方法的软件