首页 / 专利库 / 软件 / 操作系统 / 内核 / 检测进程无响应的方法和装置

检测进程无响应的方法和装置

阅读:0发布:2020-06-29

专利汇可以提供检测进程无响应的方法和装置专利检索,专利查询,专利分析的服务。并且本公开的 实施例 公开了一种用于检测 进程 无响应的方法和装置,该方法包括:针对多个目标进程中的每个目标进程,在系统 内核 侧创建并激活 定时器 ,以针对所述目标进程进行计时;以及在对应的所述定时器的计时超过预定的时间 阈值 时,确定所述目标进程无响应,并且执行预定的相关联的动作。本公开的实施例能够支持多个监控目标并对其进行动态扩展,在系统内核层实现了对用户空间事务的监控,通过系统调用的方式来进行监控目标和检测器之间的通信,同时能够管理并利用底层的 硬件 看 门 狗,有效地提高了进程无响应检测的可扩展性和可靠性并克服了硬件依赖性。,下面是检测进程无响应的方法和装置专利的具体信息内容。

1.一种用于检测进程无响应的方法,所述方法包括:
针对多个目标进程中的每个目标进程,在系统内核侧创建并激活定时器,以针对所述目标进程进行计时;以及
在对应的所述定时器的计时超过预定的时间阈值时,确定所述目标进程无响应,并且执行预定的相关联的动作,
其中所述定时器记录指示接收到来自所述目标进程的预定字符的标志。
2.根据权利要求1所述的方法,其中所述目标进程是用户空间进程。
3.根据权利要求1所述的方法,其中预定的所述时间阈值以及预定的所述相关联的动作是响应于来自所述目标进程的设置命令而设置的。
4.根据权利要求1所述的方法,进一步包括:
响应于接收到来自所述目标进程的心跳消息,重新启动对应的所述定时器,以针对所述目标进程重新计时。
5.根据权利要求4所述的方法,其中响应于接收到来自所述目标进程的心跳消息,重新启动对应的所述定时器,以针对所述目标进程重新计时包括:
从所述心跳消息中获取由所述目标进程写入的字符;以及
响应于确定所述字符是所述预定字符,设置所述标志以指示接收到来自所述目标进程的所述预定字符。
6.根据权利要求5所述的方法,进一步包括:
响应于接收到来自所述目标进程的关闭消息,基于指示接收到来自所述目标进程的所述预定字符的所述标志来执行相应的操作。
7.根据权利要求6所述的方法,其中响应于接收到来自所述目标进程的关闭消息,基于指示接收到来自所述目标进程的所述预定字符的所述标志来执行相应的操作包括:
在所述标志指示接收到来自所述目标进程的所述预定字符时,停止对应的所述定时器;以及
在所述标志没有指示接收到来自所述目标进程的所述预定字符时,使得对应的所述定时器继续运行。
8.根据权利要求1所述的方法,进一步包括:
在所述系统内核侧创建实时的内核线程,以周期性地向硬件狗发送心跳消息;以及
在发生致命问题时,因内核无法正常工作而停止向所述硬件看门狗发送所述心跳消息,以便于由所述硬件看门狗对系统执行重新启动。
9.一种用于检测进程无响应的装置,所述装置包括:
计时模,被配置为针对多个目标进程中的每个目标进程,在系统内核侧创建并激活定时器,以针对所述目标进程进行计时;以及
无响应确定模块,被配置为在对应的所述定时器的计时超过预定的时间阈值时,确定所述目标进程无响应,并且执行预定的相关联的动作,
其中所述定时器记录指示接收到来自所述目标进程的预定字符的标志。
10.根据权利要求9所述的装置,其中所述目标进程是用户空间进程。
11.根据权利要求9所述的装置,其中预定的所述时间阈值以及预定的所述相关联的动作是响应于来自所述目标进程的设置命令而设置的。
12.根据权利要求9所述的装置,进一步包括:
心跳响应模块,被配置为响应于接收到来自所述目标进程的心跳消息,重新启动对应的所述定时器,以针对所述目标进程重新计时。
13.根据权利要求12所述的装置,其中所述心跳响应模块被配置为:
从所述心跳消息中获取由所述目标进程写入的字符;以及
响应于确定所述字符是所述预定字符,设置所述标志以指示接收到来自所述目标进程的所述预定字符。
14.根据权利要求13所述的装置,进一步包括:
关闭响应模块,被配置为响应于接收到来自所述目标进程的关闭消息,基于指示接收到来自所述目标进程的所述预定字符的所述标志来执行相应的操作。
15.根据权利要求14所述的装置,其中所述关闭响应模块被配置为:
在所述标志指示接收到来自所述目标进程的所述预定字符时,停止对应的所述定时器;以及
在所述标志没有指示接收到来自所述目标进程的所述预定字符时,使得对应的所述定时器继续运行。
16.根据权利要求9所述的装置,进一步包括硬件无响应检测模块,所述硬件无响应检测模块被配置为:
在所述系统内核侧创建实时的内核线程,以周期性地向硬件看门狗发送心跳消息;以及
在发生致命问题时,因内核无法正常工作而停止向所述硬件看门狗发送所述心跳消息,以便于由所述硬件看门狗对系统执行重新启动。
17.一种非瞬态计算机可读介质,其包括机器可执行指令,所述机器可执行指令在被执行时使机器执行根据权利要求1至8中的任一项所述的方法的步骤。

说明书全文

检测进程无响应的方法和装置

技术领域

[0001] 本公开的实施例总体涉及对进程无响应的检测,更具体地,涉及一种用于检测进程无响应的方法和装置。

背景技术

[0002] 对于操作系统而言,在系统不同级别上的挂起(hang)或无响应检测是使系统具有更好的可支持性和可调试性的关键。挂起检测器(hang detector),例如看狗(watchdog),是用以实现该目标的一种机制。通常,挂起检测器试图将挂起或无响应问题转换成内核失措(kernel panic)或者进程核心转储(process core dump)问题,从而避免工程团队在客户环境上进行调试工作,这在多数客户案例中通常是不可能的。通过内核或者进程核心转储,工程团队能够进行离线分析,使得能够应用进一步的支持性行动以修复客户问题。
[0003] 一般而言,挂起检测器涉及两个部分:监控目标以及检测器(或者看门狗)。监控目标是需要由挂起检测器检查的硬件软件上下文,它可以是进程、线程、软件中断或硬件中断、或者用户/内核空间应用程序编程接口(API)。检测器是周期性地检查来自相关的监控目标的硬件或软件事件的另一硬件或软件上下文。如果硬件或软件事件指示挂起发生,则检测器可以采取行动以恢复监控目标,例如,触发进程核心转储、内核或者平台硬重启。
[0004] 根据实现方式,挂起检测器可以分为两类:硬件挂起检测器和软件挂起检测器。硬件挂起检测器通常需要附加的硬件支持并且通常不由主机操作系统所拥有,因此即使主机死掉它仍然可以控制系统。操作系统和进程可以向硬件挂起检测器发送心跳消息,当硬件挂起检测器在一定时间段内没有收到心跳消息,它可以触发内核失措或者系统重启。软件挂起检测器是主机操作系统中的软件部件,它可以从目标进程(或线程)接收心跳消息。如果没有接收到心跳消息,软件挂起检测器可以使系统失措或者仅仅杀掉目标进程。
[0005] 根据使用场景,挂起检测器可以分为两类:内核空间挂起检测器和用户空间挂起检测器。一般而言,内核空间挂起检测器需要处理两类问题:由中央处理单元(CPU)加引起的进程挂起,通常这类挂起是由不合适的中断禁止时间或者由自旋锁(spinlock)死锁导致的任务饥饿;以及由进程睡眠引起的进程受困,通常这类挂起是由非自旋锁之间的死锁或者存储器或输入输出(I/O)资源所导致。用户空间挂起检测器最常见的实现方式是在用户空间中引入另一检测器进程以检测具体用户进程挂起的问题。例如,进程A是监控目标而进程B是挂起检测器。进程A向进程B周期性地发送心跳消息。如果B不能够及时地收到该心跳消息,则B将杀掉进程A或者使系统失措。
[0006] 然而,现有的这些挂起检测器存在各种缺点或不足。典型的硬件挂起检测器,例如,智能平台管理界面(IPMI)看门狗以及平台控制器中心(PCH)或I/O控制器中心(ICH)看门狗,存在硬件依赖性问题和可扩展性问题。硬件挂起检测器通常仅能够用于特定类型的硬件,并且通常仅存在由硬件提供的一个定时器实例,因此难以被用于多个进程的挂起检测,尤其在不同进程具有不同的时序要求时。内核空间挂起检测器通常仅具有内核调度信息,而用户空间的事务性挂起需要知道用户空间事务的时间要求,因此内核空间检测器往往具有其局限性。用户空间挂起检测器具有用户空间事务的信息,通过适当的设计能够检测用户空间挂起问题,但是在可靠性和可扩展性方面存在严重的不足或局限。例如,当内核出现问题时,用户空间挂起检测器本身可能受困;当挂起检测器想要采取行动时,触发该行动的代码可能也出现了问题。又如,用户空间挂起检测器通常是自组织实现方式,因此不能够有效地扩展其功能以支持新的用户空间事务。通常监控目标和检测器两侧都需要修改代码。
[0007] 因此,本领域中需要一种更为有效的技术方案来检测系统中的进程挂起或无响应,以解决上述问题。发明内容
[0008] 本公开的实施例旨在提供一种用于检测进程无响应的方法和装置,以解决上述问题。
[0009] 根据本公开的一个方面,提供了一种用于检测进程无响应的方法,所述方法包括:针对多个目标进程中的每个目标进程,在系统内核侧创建并激活定时器,以针对所述目标进程进行计时;以及在对应的所述定时器的计时超过预定的时间阈值时,确定所述目标进程无响应,并且执行预定的相关联的动作。
[0010] 在一个实施例中,所述目标进程是用户空间进程。
[0011] 在另一实施例中,预定的所述时间阈值以及预定的所述相关联的动作是响应于来自所述目标进程的设置命令而设置的。
[0012] 在又一实施例中,所述方法进一步包括:响应于接收到来自所述目标进程的心跳消息,重新启动对应的所述定时器,以针对所述目标进程重新计时。
[0013] 在再一实施例中,所述定时器记录指示接收到来自所述目标进程的预定字符的标志。
[0014] 在再一实施例中,响应于接收到来自所述目标进程的心跳消息,重新启动对应的所述定时器,以针对所述目标进程重新计时包括:从所述心跳消息中获取由所述目标进程写入的字符;以及响应于确定所述字符是所述预定字符,设置所述标志以指示接收到来自所述目标进程的所述特定字符。
[0015] 在再一实施例中,所述方法进一步包括:响应于接收到来自所述目标进程的关闭消息,基于指示接收到来自所述目标进程的所述预定字符的所述标志来执行相应的操作。
[0016] 在再一实施例中,响应于接收到来自所述目标进程的关闭消息,基于指示接收到来自所述目标进程的所述预定字符的所述标志来执行相应的操作包括:在所述标志指示接收到来自所述目标进程的所述预定字符时,停止对应的所述定时器;以及在所述标志没有指示接收到来自所述目标进程的所述特定字符时,使得对应的所述定时器继续运行。
[0017] 在再一实施例中,所述方法进一步包括:在所述系统内核侧创建实时的内核线程,以周期性地向硬件看门狗发送心跳消息;以及在发生致命问题时,因内核无法正常工作而停止向所述硬件看门狗发送所述心跳消息,以便于由所述硬件看门狗对系统执行重新启动。
[0018] 在再一实施例中,所述硬件看门狗是具有一种或者多种类型的一个或者多个硬件看门狗。
[0019] 根据本公开的另一方面,提供了一种用于检测进程无响应的装置,所述装置包括:计时模,被配置为针对多个目标进程中的每个目标进程,在系统内核侧创建并激活定时器,以针对所述目标进程进行计时;以及无响应确定模块,被配置为在对应的所述定时器的计时超过预定的时间阈值时,确定所述目标进程无响应,并且执行预定的相关联的动作。
[0020] 在一个实施例中,所述目标进程是用户空间进程。
[0021] 在另一实施例中,预定的所述时间阈值以及预定的所述相关联的动作是响应于来自所述目标进程的设置命令而设置的。
[0022] 在再一实施例中,所述装置进一步包括:心跳响应模块,被配置为响应于接收到来自所述目标进程的心跳消息,重新启动对应的所述定时器,以针对所述目标进程重新计时。
[0023] 在再一实施例中,所述定时器记录指示接收到来自所述目标进程的预定字符的标志。
[0024] 在再一实施例中,所述心跳响应模块被配置为:从所述心跳消息中获取由所述目标进程写入的字符;以及响应于确定所述字符是所述预定字符,设置所述标志以指示接收到来自所述目标进程的所述特定字符。
[0025] 在再一实施例中,所述装置进一步包括:关闭响应模块,被配置为响应于接收到来自所述目标进程的关闭消息,基于指示接收到来自所述目标进程的所述预定字符的所述标志来执行相应的操作。
[0026] 在再一实施例中,所述关闭响应模块被配置为:在所述标志指示接收到来自所述目标进程的所述预定字符时,停止对应的所述定时器;以及在所述标志没有指示接收到来自所述目标进程的所述特定字符时,使得对应的所述定时器继续运行。
[0027] 在再一实施例中,所述装置进一步包括硬件无响应检测模块,所述硬件无响应检测模块被配置为:在所述系统内核侧创建实时的内核线程,以周期性地向硬件看门狗发送心跳消息;以及在发生致命问题时,因内核无法正常工作而停止向所述硬件看门狗发送所述心跳消息,以便于由所述硬件看门狗对系统执行重新启动。
[0028] 在再一实施例中,所述硬件看门狗是具有一种或者多种类型的一个或者多个硬件看门狗。
[0029] 根据本公开的又一方面,提供了一种用于检测进程无响应的计算机程序产品,所述计算机程序产品被有形地存储在非瞬态计算机可读介质上并且包括计算机可执行指令,所述计算机可执行指令在被执行时使得计算机执行所述方法的任意步骤。
[0030] 与现有技术相比,本公开的实施例能够支持多个监控目标并对其进行动态扩展,在系统内核层实现了对用户空间事务的监控,通过系统调用的方式来进行监控目标和检测器之间的通信,同时能够管理并利用底层的硬件看门狗,有效地提高了进程无响应检测的可扩展性和可靠性并克服了硬件依赖性。附图说明
[0031] 在此所述的附图用来提供对本公开的进一步理解,构成本公开的一部分,本公开的示意性实施例及其说明用于解释本公开,并不构成对本公开的不当限定。在附图中:
[0032] 图1以Linux操作系统为例,图示了根据本公开的实施例的用于检测进程无响应的示例性系统架构图。
[0033] 图2图示了根据本公开的一个实施例的用于检测进程无响应的方法200的流程图
[0034] 图3图示了根据本公开的另一实施例的用于检测进程无响应的方法300的流程图;
[0035] 图4图示了根据本公开的一个实施例的用于检测进程无响应的装置400的框图
[0036] 图5图示了根据本公开的另一实施例的用于检测进程无响应的装置500的框图;
[0037] 图6图示了适于实现本公开的示例实施例的计算机系统的框图。
[0038] 在各个附图中,相同或对应的标号表示相同或对应的部分。

具体实施方式

[0039] 在下文中,将参考附图详细描述本公开的各个示例性实施例。应当注意,这些附图和描述涉及的仅仅是作为示例性的实施例。应该指出的是,根据随后描述,很容易设想出此处公开的结构和方法的替换实施例,并且可以在不脱离本公开要求保护的原理的情况下使用这些替代实施例。
[0040] 应当理解,给出这些示例性实施例仅仅是为了使本领域技术人员能够更好地理解进而实现本公开,而并非以任何方式限制本公开的范围。
[0041] 在此使用的术语“包括”、“包含”及类似术语应该被理解为是开放性的术语,即“包括/包含但不限于”。术语“基于”是“至少部分地基于”。术语“一个实施例”表示“至少一个实施例”;术语“另一实施例”表示“至少一个另外的实施例”。其他术语的相关定义将在下文描述中给出。
[0042] 在下文中,将参考附图来详细描述根据本公开的实施例的检测进程无响应的技术方案。首先参考图1,以Linux操作系统为例来描述根据本公开的实施例的用于检测进程无响应的示例性系统架构图。
[0043] 如图1所示,用于检测进程无响应的示例性系统架构可以分为三层:用户空间层、内核层和硬件及驱动层。
[0044] 根据本公开的实施例,所有的目标进程都运行在用户空间中。进程挂起检测器被实现为系统内核模块,其向目标进程提供一组API以允许目标进程使用这组API来管理进程挂起检测器并与进程挂起检测器进行通信。
[0045] 如上所述,进程挂起检测器被实现为系统内核模块。例如,在Linux操作系统中,当加载上述进程挂起检测器模块时,执行如下初始化操作:定义用于管理每个目标进程的特定定时器数据结构(以下出于简化的目的,将该特定定时器数据结构的实例简称为挂起检测器或检测器),该特定定时器数据结构包括标准内核定时器、用于该标准内核定时器的超时时间以及与超时相关联的动作、目标进程标识符(ID)、目标进程名称、指示是否接收到预定字符(例如,‘V’)的标志、以及该特定定时器在位图(bitmap)中的ID;声明并向内核注册字符设备,该字符设备包括设备号、设备名称和文件操作;为位图分配特定大小的存储器;以及创建实时的内核线程用于向硬件看门狗发送心跳消息。完成上述操作以后,进程挂起检测器在用户空间侧可见。
[0046] 接下来,用户空间进程(即,目标进程)可以通过通用文件系统调用来操作进程挂起检测器。以Linux操作系统为例,通用文件系统调用包括:open(),用于创建针对目标进程的新的进程挂起检测器;write(),用于对创建的挂起检测器执行喂狗(ping)操作,即,向挂起检测器发送心跳消息;ioctl(),用于通过控制命令来设置挂起检测器的超时时间阈值和与超时相关联的动作;以及close(),用于删除针对目标进程的挂起检测器。使用系统调用的方式来使得目标进程和挂起检测器进行通信可以简化支持多个目标进程和心跳发送的实现方式。应当理解,其他方式也可以用于目标进程和挂起检测器之间的通信,例如,进程间通信(IPC)机制。
[0047] 进程挂起检测器还使用硬件开门狗API来管理硬件看门狗并与硬件看门狗进行通信。硬件看门狗驱动(诸如IPMI看门狗、PCH看门狗及ICH看门狗)在大多数的操作系统中通常是默认可用的。
[0048] 从系统内核中移除上述进程挂起检测器模块时,执行如下清理操作:停止相关的内核线程,注销字符设备并释放分配给位图的内存空间。
[0049] 下面参考图2,其图示了根据本公开的一个实施例的用于检测进程无响应的方法200的流程图。方法200包括步骤S201至步骤S202。
[0050] 在步骤S201,针对多个目标进程中的每个目标进程,在系统内核侧创建并激活定时器,以针对目标进程进行计时。
[0051] 根据本公开的实施例,目标进程是用户空间进程。以图1所示的Linux操作系统中的示例性系统架构为例,当用户空间进程调用open()时,将创建针对该用户空间进程(即,目标进程)的挂起检测器。例如,模块驱动程序首先将试图查找位图中的空的槽。如果找到,则向该用户空间进程分配一个检测器(如上所述,检测器是用于管理每个目标进程的特定定时器数据结构的实例)。槽标识符也需要被存储在特定定时器数据结构中,使得在其他文件系统调用中可以标识所操作的检测器。在检测器成功创建以后,需要递增进程挂起检测器模块的引用计数。最后,该检测器被激活,即启用其中的标准内核定时器以针对该目标进程进行计时。
[0052] 接下来,方法200进行至步骤S202。
[0053] 在步骤S202,在对应的定时器的计时超过预定的时间阈值时,确定目标进程无响应,并且执行预定的相关联的动作。
[0054] 根据本公开的实施例,预定的时间阈值以及预定的相关联的动作是响应于来自目标进程的设置命令而设置的。例如,继续基于图1所示的Linux操作系统中的示例性系统架构来描述,当用户空间进程调用ioctl()时,可以根据传入ioctl()的具体命令来执行对应的操作,例如,获取用于标准内核定时器的超时时间、设置该超时时间以及设置与超时相关联的动作等。如果针对用户空间进程的计时超过了所设置的用于标准内核定时器的超时时间,则确定该用户空间进程无响应,并且所设置的与超时相关联的动作将被执行。与超时相关联的动作可以包括,例如,在控制台上打印日志信息以示出超时的进程、使得整个系统失措、或者转储堆栈跟踪信息等。
[0055] 备选地或者附加地,方法200还可以包括如下步骤:在系统内核侧创建实时的内核线程,以周期性地向硬件看门狗发送心跳消息;以及在发生致命问题时,因内核无法正常工作而停止向硬件看门狗发送心跳消息,以便于由硬件看门狗对系统执行重新启动。通过这些步骤,本公开的实施例可以利用底层的硬件看门狗来有效提高进程无响应检测的可靠性。
[0056] 至此,方法200结束。
[0057] 下面参照图3,其图示了根据本公开的另一实施例的用于检测进程无响应的方法300的流程图。方法300包括步骤S301至步骤S304。
[0058] 在步骤S301,针对多个目标进程中的每个目标进程,在系统内核侧创建并激活定时器,以针对目标进程进行计时。在步骤S302,在对应的定时器的计时超过预定的时间阈值时,确定目标进程无响应,并且执行预定的相关联的动作。上述两个步骤分别与方法200中的步骤S201和步骤S202相同,在此不再作进一步地详细描述。
[0059] 接下来,方法300进行至步骤S303。
[0060] 在步骤S303,响应于接收到来自目标进程的心跳消息,重新启动对应的定时器,以针对目标进程重新计时。
[0061] 例如,继续基于图1所示的Linux操作系统中的示例性系统架构来描述,用户空间进程可以通过调用write()来向挂起检测器发送心跳消息,该心跳消息可以指示用户空间进程没有挂起,即该用户空间进程是有响应的。响应于接收到来自该用户空间进程的心跳消息,检测器将被重启,即对该用户空间进程重新开始计时。
[0062] 根据本公开的实施例,定时器记录指示接收到来自目标进程的预定字符的标志。例如,以图1所示的Linux操作系统中的示例性系统架构为例,在系统内核中定义了用于管理每个目标进程的特定定时器数据结构(该特定定时器数据结构的实例简称为挂起检测器或检测器),其中包括指示是否接收到预定字符(例如,‘V’)的标志,该标志将被用于根据本公开的实施例的特定的定时器停止功能。
[0063] 根据本公开的实施例,步骤S303进一步包括:从心跳消息中获取由目标进程写入的字符;以及响应于确定字符是预定字符,设置标志以指示接收到来自目标进程的特定字符。例如,用户空间进程可以通过调用write()来向挂起检测器发送心跳消息,该心跳消息中包括由该用户空间进程写入的字符,例如,‘V’。当该字符为预定字符(例如,‘V’)时,将相应的标志设置为指示接收到预定字符,例如,1。而当该字符不是预定字符时,则不设置相应的标志,即该标志为其默认值,例如,0。
[0064] 接下来,方法300进行至步骤S304。
[0065] 在步骤S304,响应于接收到来自目标进程的关闭消息,基于指示接收到来自目标进程的预定字符的标志来执行相应的操作。根据本公开的实施例,该操作包括:在标志指示接收到来自目标进程的预定字符时,停止对应的定时器;以及在标志没有指示接收到来自目标进程的特定字符时,使得对应的定时器继续运行。
[0066] 例如,以图1所示的Linux操作系统中的示例性系统架构为例,用户空间进程可以通过调用close()来停止对该用户空间进程的计时,并删除分配给该用户空间进程的挂起检测器。当挂起检测器中的标志指示接收到预定字符(例如,‘V’)时,停止并删除运行的定时器、递减模块引用计数并且释放针对该挂起检测器分配的存储空间,同时将位图中对应的槽清零;而如果标志没有指示接收到预定字符(例如,‘V’)时,使得挂起检测器继续运行,即定时器继续针对用户空间进程进行计时。
[0067] 备选地或者附加地,方法300还可以包括如下步骤:在系统内核侧创建实时的内核线程,以周期性地向硬件看门狗发送心跳消息;以及在发生致命问题时,停止向硬件看门狗发送心跳消息,以便于由硬件看门狗对系统执行重新启动。通过这些步骤,本公开的实施例可以利用底层的硬件看门狗来有效提高进程无响应检测的可靠性。
[0068] 至此,方法300结束。
[0069] 在实践中,根据本公开的实施例的用于检测进程无响应的方法可以被应用于许多场景。以下列举几个示例来进行说明。
[0070] 例如,本公开的实施例可以被用来监控高可用性(HA)系统中的故障转移程序。当HA启动时,可以创建挂起检测器并且设置超时时间,例如,10秒(s)。HA以2s的间隔向挂起检测器发送心跳消息。当故障转移开始时,HA停止向挂起检测器发送心跳消息并且开始运行一些程序,如果这些程序完成并且耗费的时间少于10s,则HA将开始向挂起检测器发送心跳消息以保持系统活跃。如果这些程序不能在10s内完成,则挂起检测器将使系统失措并且立刻重启。当操作系统无响应时,挂起检测器的动作可能不能够被触发,此时可以通过硬件看门狗来触发平台重置。
[0071] 例如,本公开的实施例可以被用来监控一些关键的系统状态和事件,例如,存储器压以及系统I/O状态。以监控存储器压力为例,应用程序可以创建挂起检测器并设置超时时间,诸如6分钟。在一个循环中,每隔2分钟检查系统可用存储器,如果低于压力阈值,则开始下一个循环并且向挂起检测器发送心跳消息;否则,应用程序向挂起检测器发送心跳消息。如果系统存储器处于压力下(即,可用存储器低于压力阈值)持续6分钟,则针对某些系统而言,可能出现了某些问题,这时挂起检测器触发失效路径:内核失措并且磁盘转储,以将当前存储器保存至磁盘用于调试。
[0072] 下面参考图4,其图示了根据本公开的一个实施例的用于检测进程无响应的装置400的流程图。装置400包括计时模块401,被配置为针对多个目标进程中的每个目标进程,在系统内核侧创建并激活定时器,以针对目标进程进行计时;以及无响应确定模块402,被配置为在对应的定时器的计时超过预定的时间阈值时,确定目标进程无响应,并且执行预定的相关联的动作。
[0073] 根据本公开的实施例,其中目标进程是用户空间进程,并且其中预定的时间阈值以及预定的相关联的动作是响应于来自目标进程的设置命令而设置的。
[0074] 备选地或者附加地,装置400还可以包括硬件无响应检测模块,所述硬件无响应检测模块被配置为:在系统内核侧创建实时的内核线程,以周期性地向硬件看门狗发送心跳消息;以及在发生致命问题时,停止向硬件看门狗发送心跳消息,以便于由硬件看门狗对系统执行重新启动。根据本公开的实施例,其中硬件看门狗可以是具有一种或者多种类型的一个或者多个硬件看门狗。
[0075] 下面参考图5,其图示了根据本公开的一个实施例的用于检测进程无响应的装置500的流程图。装置500包括计时模块501,被配置为针对多个目标进程中的每个目标进程,在系统内核侧创建并激活定时器,以针对目标进程进行计时;无响应确定模块502,被配置为在对应的定时器的计时超过预定的时间阈值时,确定目标进程无响应,并且执行预定的相关联的动作;心跳响应模块503,被配置为响应于接收到来自目标进程的心跳消息,重新启动对应的定时器,以针对目标进程重新计时;以及关闭响应模块,被配置为基于指示接收到来自目标进程的预定字符的标志,响应于接收到来自所述目标进程的关闭消息来执行相应的操作,该操作包括:在标志指示接收到来自目标进程的预定字符时,停止对应的定时器;以及在所述标志没有指示接收到来自目标进程的特定字符时,使得对应的定时器继续运行。
[0076] 备选地或者附加地,装置500还可以包括硬件无响应检测模块,所述硬件无响应检测模块被配置为:在系统内核侧创建实时的内核线程,以周期性地向硬件看门狗发送心跳消息;以及在发生致命问题时,停止向硬件看门狗发送心跳消息,以便于由硬件看门狗对系统执行重新启动。根据本公开的实施例,其中硬件看门狗可以是具有一种或者多种类型的一个或者多个硬件看门狗。
[0077] 下面参考图6,其图示了适于实现本公开的示例实施例的计算机系统600的框图。如图6所示,计算机系统600包括中央处理单元(CPU)601,其可以根据存储在只读存储器(ROM)602中的程序或者从存储部分508加载到随机访问存储器(RAM)603中的程序而执行各种适当的动作和处理。在RAM 603中,还存储有装置400或者装置500操作所需的各种程序和数据。CPU 601、ROM 602以及RAM 603通过总线604彼此相连。输入/输出(I/O)接口605也连接至总线604。
[0078] 以下部件连接至I/O接口605:包括键盘鼠标等的输入部分606;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分607;包括硬盘等的存储部分608;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分609。通信部分609经由诸如因特网的网络执行通信处理。驱动器610也根据需要连接至I/O接口605。可拆卸介质611,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器610上,以便于从其上读出的计算机程序根据需要被安装入存储部分608。
[0079] 特别地,根据本公开的实施例,参考图2描述的方法200以及参考图3描述的方法300可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,所述计算机程序产品被有形地存储在非瞬态计算机可读介质上并且包括计算机可执行指令,所述计算机可执行指令在被执行时使得计算机执行方法200和/或方法300中的任意步骤。
[0080] 综上所述,根据上述本公开的实施例,提供了一种用于检测进程无响应的方法和装置。与现有技术相比,本公开的实施例能够支持多个监控目标并对其进行动态扩展,在系统内核层实现了对用户空间事务的监控,通过系统调用的方式来进行监控目标和检测器之间的通信,同时能够管理并利用底层的硬件看门狗,有效地提高了进程无响应检测的可扩展性和可靠性并克服了硬件依赖性。
[0081] 一般而言,本公开的各种示例实施例可以在硬件或专用电路、软件、逻辑,或其任何组合中实施。某些方面可以在硬件中实施,而其他方面可以在可以由控制器、微处理器或其他计算设备执行的固件或软件中实施。当本公开的实施例的各方面被图示或描述为框图、流程图或使用某些其他图形表示时,将理解此处描述的方框、装置、系统、技术或方法可以作为非限制性的示例在硬件、软件、固件、专用电路或逻辑、通用硬件或控制器或其他计算设备,或其某些组合中实施。
[0082] 而且,流程图中的各框可以被看作是方法步骤,和/或计算机程序代码的操作生成的操作,和/或理解为执行相关功能的多个耦合的逻辑电路元件。例如,本公开的实施例包括计算机程序产品,该计算机程序产品包括有形地实现在机器可读介质上的计算机程序,该计算机程序包含被配置为实现上文描述方法的程序代码。
[0083] 在公开的上下文内,机器可读介质可以是包含或存储用于或有关于指令执行系统、装置或设备的程序的任何有形介质。机器可读介质可以是机器可读信号介质或机器可读存储介质。机器可读介质可以包括但不限于电子的、磁的、光学的、电磁的、红外的或半导体系统、装置或设备,或其任意合适的组合。机器可读存储介质的更详细示例包括带有一根或多根导线的电气连接、便携式计算机磁盘、硬盘、随机存取存取器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或闪存)、光存储设备、磁存储设备,或其任意合适的组合。
[0084] 用于实现本公开的方法的计算机程序代码可以用一种或多种编程语言编写。这些计算机程序代码可以提供给通用计算机、专用计算机或其他可编程的数据处理装置的处理器,使得程序代码在被计算机或其他可编程的数据处理装置执行的时候,引起在流程图和/或框图中规定的功能/操作被实施。程序代码可以完全在计算机上、部分在计算机上、作为独立的软件包、部分在计算机上且部分在远程计算机上或完全在远程计算机或服务器上执行。
[0085] 另外,尽管操作以特定顺序被描绘,但这并不应该理解为要求此类操作以示出的特定顺序或以相继顺序完成,或者执行所有图示的操作以获取期望结果。在某些情况下,多任务或并行处理会是有益的。同样地,尽管上述讨论包含了某些特定的实施细节,但这并不应解释为限制任何发明或权利要求的范围,而应解释为对可以针对特定发明的特定实施例的描述。本说明书中在分开的实施例的上下文中描述的某些特征也可以整合实施在单个实施例中。相反地,在单个实施例的上下文中描述的各种特征也可以分离地在多个实施例或在任意合适的子组合中实施。
[0086] 针对前述本公开的示例实施例的各种修改、改变将在连同附图查看前述描述时对相关技术领域的技术人员变得明显。任何及所有修改将仍落入非限制的和本公开的示例实施例范围。此外,前述说明书和附图存在启发的益处,涉及本公开的这些实施例的技术领域的技术人员将会想到此处阐明的本公开的其他实施例。
[0087] 将会理解,本公开的实施例不限于公开的特定实施例,并且修改和其他实施例都应包含于所附的权利要求范围内。尽管此处使用了特定的术语,但是它们仅在通用和描述的意义上使用,而并不用于限制目的。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈