进程状态监控方法及单元的制作方法

文档序号:6599867阅读:351来源:国知局
专利名称:进程状态监控方法及单元的制作方法
技术领域
本发明涉及计算机应用技术领域,具体涉及进程监控方法及单元。
背景技术
进程是计算机应用软件运行的一个实例,对进程状态的监控和管理是计算机软件管理的一个重要范畴。一个好的应用程序,尤其是对外提供服务的应用程序,必须能够将其内部运行状态实时反馈给外部系统,供外界对其进行监控、管理和维护。一旦进程运行出现问题,外界能够及时获知,并进而采取相应的对策如重新启动进程等。对进程状态监控的准确性,直接影响到应用软件的可用性。现有对进程进行监控的方法主要有两种第一种通过操作系统提供的应用程序接口(API,ApplicationProgramming hterface)对操作系统中运行的进程进行监控。各种不同的操作系统都提供了系统监控的 API,能够监控到系统中正在运行的各个进程状态,此方式能实时得到进程的中央处理单元 (CPU, Central Processing Unit)利用率、内存占用率等通用信息。第二种进程通过打开特定的套接字(Socket)端口,与外部程序通信并进行数据交互,将进程的内部状态信息反馈给外部程序。第一种方案存在以下缺点—、监控数据不完整通过操作系统提供的API只能获知进程是否正在运行,并得到CPU、内存等通用信息,无法获知进程更具体的内部状态信息,例如一个服务进程在开始启动到能够正常提供服务有一个时间间隔,此时进程的状态应该是“正在启动”,而不是通过操作系统的API获知的“已经启动并能提供服务”。二、跨平台能力较低对不同的操作系统需要使用不同的API进行监控,使得监控软件的跨平台能力降低。三、无法对多实例进程的各个实例进行区分同一个操作系统中如果同时启动同一个应用程序的多个实例,操作系统无法区分具体需要监控哪个实例。对基于Java虚拟机的服务进程进行监控时该问题尤其突出,系统中所有使用Java虚拟机的程序使用操作系统提供的API取到的进程名都是“java”,无法区分哪个进程是需要监控的进程。第二种方案存在以下缺点一、可能出现监控冲突=Socket端口是操作系统中的一类重要资源,不同的进程不能绑定相同的端口以提供服务,因此应用程序启动时,如果监控端口已经被其它进程占用了,就会产生监控失败的问题。二、Socket资源对操作系统依赖过高当操作系统发生问题时,Socket端口可能会误认为被监控进程已经停止,从而不继续提供监控服务,此时监控操作将会失败。在进程的监控过程中,一旦由于外部原因导致获取的监控数据出现问题,就可能导致外部监控程序对被监控进程执行误操作如将正常运行的进程重启等,此类误操作导致的后果往往很严重。因此,亟需一种稳定、简单、通用的进程状态监控方法。

发明内容
本发明提供进程状态监控方法及单元,以提高监控进程状态的准确性、稳定性和通用性。本发明的技术方案是这样实现的一种进程状态监控方法,预先设定每个被监控进程的每个实例对应一个状态文件,且所有状态文件互不重叠,该方法包括一个被监控进程的一个实例启动,该实例在自身的状态文件上加互斥锁,并将自身从启动到停止过程中的各个状态信息写入该状态文件中;监控进程从所述被监控进程的所述实例的状态文件中读取状态信息。所述状态信息为正在启动、已经启动、正在停止或已经停止。所述监控进程从所述被监控进程的所述实例的状态文件中读取状态信息之前进一步包括监控进程定时查询所述被监控进程的所述实例的状态文件,判断是否该状态文件不存在或者未加锁,若是,则确定所述实例未启动或已停止;否则,执行所述从所述被监控进程的所述实例的状态文件中读取状态信息的动作。当监控进程发现所述被监控进程的所述实例的状态文件加锁时,所述方法进一步包括监控进程发现所述状态文件中的状态信息在预设时长内未被更新,则执行实例异常操作。所述该实例在自身的状态文件上加互斥锁之后进一步包括该实例定时将自身的资源占用信息写入自身的状态文件中;且,监控进程定时从所述实例的状态文件中读取资源占用信息;或者,该实例在自身发生运行错误现象时,将错误信息写入自身的状态文件中;且,监控进程定时从所述实例的状态文件中读取错误信息。所述方法进一步包括监控进程在需要对一个被监控进程的一个实例进行管理时,将管理指令写入该实例的状态文件中,该实例读取该指令,根据该指令执行相应操作。所述预先设定每个被监控进程的每个实例对应一个状态文件包括监控进程或预先设定的状态文件分配进程为每个被监控进程的每个实例分配一个状态文件;或者,预先设定状态文件分配规则,以便每个被监控进程的每个实例根据该规则确定本实例对应的状态文件。一种进程状态监控单元,包括状态文件信息获取模块获取并记录每个被监控进程的每个实例对应的状态文件信息,其中,所有状态文件互不重叠;监控模块根据状态文件信息获取模块记录的每个被监控进程的每个实例的状态文件信息,定时轮询各被监控进程的各实例的状态文件,若发现一个实例的状态文件被加互斥锁,则从该状态文件中读取该实例写入的状态信息。
该单元进一步包括状态文件分配模块为每个被监控进程的每个实例分配一个状态文件,且所有状态文件互不重叠,并将为每个被监控进程的每个实例分配的状态文件信息发送给状态文件信息获取模块。所述监控模块进一步包括用于当发现一个被加互斥锁的状态文件中的状态信息在预设时长内未被更新时,执行实例异常操作的子模块。所述监控模块进一步包括用于当发现一个状态文件被加互斥锁后,定时从该状态文件中读取实例写入的资源占用信息或错误信息的子模块。该单元进一步包括管理模块当需要对一个被监控进程的一个实例进行管理时,将管理指令写入该实例的状态文件中。与现有技术相比,本发明中,每个被监控进程的每个实例对应一个状态文件,且所有状态文件互不重叠,当一个被监控进程的一个实例启动时,对其状态文件加互斥锁,并将从启动到停止过程中的各状态信息写入状态文件中,监控进程从该状态文件中读取该状态信息,使得被监控进程在自身状态发生改变时,可以实时将改变后的状态信息写入状态文件中,从而使得监控进程能够准确得知每个被监控进程的每个实例的各个状态,同时,本发明只使用文件即可,不依赖于API或Socket端口,对各种操作系统都适用,且很稳定。


图1为本发明实施例提供的进程状态监控方法流程图;图2为本发明实施例提供的进程状态监控单元的组成图。
具体实施例方式下面结合附图及具体实施例对本发明再作进一步详细的说明。图1为本发明实施例提供的进程状态监控方法流程图,如图1所示,其具体步骤如下步骤100 为每个被监控进程的每个实例分配一个状态文件,且所有状态文件互不重叠,监控进程记录各被监控进程ID+实例ID与状态文件ID的对应关系,被监控进程记录自身的各实例ID与状态文件ID的对应关系。这里,状态文件ID可以为文件的存储路径+文件名。可由监控进程或一个专门的状态文件分配进程来为每个被监控进程的每个实例分配状态文件,将为所有被监控进程的所有实例分配的状态文件信息如被监控进程ID+ 实例ID+状态文件ID存入监控进程和被监控进程都可访问的存储区域中。一个被监控进程的一个实例一开始启动,首先从该存储区域读取自身的状态文件信息如根据被监控进程ID+实例ID读取到状态文件ID ;而监控进程则可从该存储区域中读取到所有被监控进程的所有实例的状态文件信息。或者,也可预先确定一个状态文件分配规则,例如所有被监控进程的状态文件的存储路径相同,都为一个指定的存储路径,而每个被监控进程的每个实例的状态文件的文件名即为被监控进程ID+实例ID,监控进程和被监控进程都预先记录该规则。当步骤101中任一被监控进程的一个实例开始启动时,首先根据该状态文件分配规则得出自身的状态文件信息如状态文件存储路径+文件名,再执行后续操作;而监控进程则可根据该规则, 得到所有被监控进程的所有实例的状态文件信息。若被监控进程只有一个实例,则只为该被监控进程分配一个状态文件即可,此时, 监控进程只需记录该被监控进程ID与其状态文件ID的对应关系,被监控进程只需记录其状态文件ID。步骤101 被监控进程的一个实例启动,对自身状态文件的部分区域如头2个字节加上互斥锁。这里,被监控进程的一个实例启动后,若根据记录的自身的状态文件ID,发现监控进程为自身分配的状态文件还未存在,则根据该状态文件ID如文件的存储路径+文件名, 创建状态文件。同一操作系统下,同一时刻只允许一个进程的一个实例对特定文件的特定区域加锁。步骤102 被监控进程的该实例将自身从启动到停止过程中的各个状态信息写入状态文件中。被监控进程的实例从启动到停止过程中的各个状态包括正在启动、已经启动、正
在停止、已经停止等。这里,可预先设定状态文件中加锁区域之后的某块区域为状态信息区域,被监控进程的实例将自身状态信息写入该区域。还可在状态文件中设置CPU、内存等资源的占用信息区域,被监控进程的实例可定时如每隔10秒将自身的CPU、内存等资源的占用信息以及当前的时间戳写入状态文件的对应区域中。还可在状态文件中设置错误信息区域,如果被监控进程的当前实例在运行过程中出错如数据库等外部资源突然不可用,则被监控进程的当前实例可将错误信息写入该区域。步骤103 监控进程定时轮询各被监控进程的各实例的状态文件,对于每个被监控进程的每个实例执行步骤104 106 步骤104 监控进程判断是否该被监控进程的该实例的状态文件不存在或者状态文件未加互斥锁,若是,执行步骤105 ;否则,执行步骤106。步骤105 监控进程认为该被监控进程的该实例未启动或已停止,本流程结束。步骤106 监控进程从该被监控进程的该实例的状态文件读取状态信息。监控进程可根据读取的状态信息采取相应的操作。例如如果发现正在运行的一个被监控进程的一个实例突然异常停止,则应该立即记录日志,并重新启动该被监控进程的该实例。监控进程还可从该实例的状态文件中读取资源占用信息、错误信息等。步骤107 被监控进程的一个实例退出,其状态文件的互斥锁被释放。这里,状态文件的互斥锁可由被监控进程的实例释放,也可由操作系统在发现被监控进程的实例退出时释放。另外,本发明实施例中,监控进程在发现一个被监控进程的一个实例状态文件存在且已被加锁后,若发现该状态文件中的状态信息在预设时长如5分钟内未被更新,则认为该被监控进程的该实例出现异常,无法提供服务,如实例挂死。此时监控进程可采取实例异常操作如记录日志、重新启动该被监控进程的实例等。 另外,本发明实施例中,还可在状态文件中设置管理字段,监控进程在需要对被监控进程的一个实例进行管理时,可将管理指令写入该区域,被监控进程的实例定时从该区域中读取指令,若读取到,则根据该指令执行相应操作。由于同一操作系统下,同一时刻只允许一个进程的一个实例对特定文件的特定区段加锁,且一旦该实例退出,该锁必然释放,本发明实施例中,被监控进程的实例启动后,对其状态文件加互斥锁,这样,监控进程就能够根据状态文件是否存在和是否已加互斥锁,准确判断出被监控进程的实例是否正常运行,不会出现误报。另外,在一个操作系统下,相对于Socket资源来说,文件系统的资源几乎是无穷尽的,本发明实施例中,为不同被监控进程的不同实例分配不同的状态文件,每个被监控进程的每个实例将其状态信息写入其状态文件中,这样,就能够确保不同被监控进程的不同实例使用不同的状态文件,而不会产生冲突,从而可实现对多实例进程的各个实例的监控。另外,文件系统对操作系统的依赖性较Socket资源要小得多,因此采用本发明实施例,监控进程状态将更加稳定、可靠。此外,本发明实施例中,监控进程还可将管理指令写入被监控进程的实例的状态文件中,从而在监控进程的同时,还可对进程进行管理。为了提高效率和资源占用率,本发明实施例中,被监控进程和监控进程可使用文件-内存映像的方式访问状态文件,无需显式地对文件进行读、写操作。目前常用的操作系统如Windows、Linux、Unix、Mac OS等均支持文件-内存映射访问方式。图2为本发明实施例提供的进程状态监控单元的组成图,如图2所示,其主要包括状态文件信息获取模块21和监控模块22,其中状态文件信息获取模块21 获取每个被监控进程的每个实例对应的状态文件信息,根据获取的信息记录被监控进程ID+实例ID与状态文件ID的对应关系,其中,所有状态文件互不重叠。监控模块22 根据状态文件信息获取模块21记录的被监控进程ID+实例ID与状态文件ID的对应关系,定时轮询各被监控进程的各实例的状态文件,若发现一个实例的状态文件被加互斥锁,则从该状态文件中读取该实例写入的状态信息。图2所示的进程状态监控单元还可包括状态文件分配模块,用于为每个被监控进程的每个实例分配一个状态文件,且所有状态文件互不重叠,并将为每个被监控进程的每个实例分配的状态文件信息发送给状态文件信息获取模块21。监控模块22还可包括用于当发现一个被加互斥锁的状态文件中的状态信息在预设时长内未被更新时,执行实例异常操作的子模块。监控模块22还可包括用于当发现一个状态文件被加互斥锁后,定时从该状态文件中读取实例写入的资源占用信息或错误信息的子模块。图2所示的进程状态监控单元还可包括管理模块,用于当需要对一个被监控进程的一个实例进行管理时,将管理指令写入该实例的状态文件中,以便该实例从该状态文件中读取该指令,并执行相应操作。
8
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
权利要求
1.一种进程状态监控方法,其特征在于,预先设定每个被监控进程的每个实例对应一个状态文件,且所有状态文件互不重叠,该方法包括一个被监控进程的一个实例启动,该实例在自身的状态文件上加互斥锁,并将自身从启动到停止过程中的各个状态信息写入该状态文件中;监控进程从所述被监控进程的所述实例的状态文件中读取状态信息。
2.如权利要求1所述的方法,其特征在于,所述状态信息为正在启动、已经启动、正在停止或已经停止。
3.如权利要求1或2所述的方法,其特征在于,所述监控进程从所述被监控进程的所述实例的状态文件中读取状态信息之前进一步包括监控进程定时查询所述被监控进程的所述实例的状态文件,判断是否该状态文件不存在或者未加锁,若是,则确定所述实例未启动或已停止;否则,执行所述从所述被监控进程的所述实例的状态文件中读取状态信息的动作。
4.如权利要求3所述的方法,其特征在于,当监控进程发现所述被监控进程的所述实例的状态文件加锁时,所述方法进一步包括监控进程发现所述状态文件中的状态信息在预设时长内未被更新,则执行实例异常操作。
5.如权利要求1或2所述的方法,其特征在于,所述该实例在自身的状态文件上加互斥锁之后进一步包括该实例定时将自身的资源占用信息写入自身的状态文件中;且,监控进程定时从所述实例的状态文件中读取资源占用信息;或者,该实例在自身发生运行错误现象时,将错误信息写入自身的状态文件中;且,监控进程定时从所述实例的状态文件中读取错误信息。
6.如权利要求1或2所述的方法,其特征在于,所述方法进一步包括监控进程在需要对一个被监控进程的一个实例进行管理时,将管理指令写入该实例的状态文件中,该实例读取该指令,根据该指令执行相应操作。
7.如权利要求1或2所述的方法,其特征在于,所述预先设定每个被监控进程的每个实例对应一个状态文件包括监控进程或预先设定的状态文件分配进程为每个被监控进程的每个实例分配一个状态文件;或者,预先设定状态文件分配规则,以便每个被监控进程的每个实例根据该规则确定本实例对应的状态文件。
8.一种进程状态监控单元,其特征在于,包括状态文件信息获取模块获取并记录每个被监控进程的每个实例对应的状态文件信息,其中,所有状态文件互不重叠;监控模块根据状态文件信息获取模块记录的每个被监控进程的每个实例的状态文件信息,定时轮询各被监控进程的各实例的状态文件,若发现一个实例的状态文件被加互斥锁,则从该状态文件中读取该实例写入的状态信息。
9.如权利要求8所述的单元,其特征在于,该单元进一步包括状态文件分配模块为每个被监控进程的每个实例分配一个状态文件,且所有状态文件互不重叠,并将为每个被监控进程的每个实例分配的状态文件信息发送给状态文件信息获取模块。
10.如权利要求8或9所述的单元,其特征在于,所述监控模块进一步包括用于当发现一个被加互斥锁的状态文件中的状态信息在预设时长内未被更新时,执行实例异常操作的子模块。
11.如权利要求8或9所述的单元,其特征在于,所述监控模块进一步包括用于当发现一个状态文件被加互斥锁后,定时从该状态文件中读取实例写入的资源占用信息或错误信息的子模块。
12.如权利要求8或9所述的单元,其特征在于,该单元进一步包括管理模块当需要对一个被监控进程的一个实例进行管理时,将管理指令写入该实例的状态文件中。
全文摘要
本发明公开了进程状态监控方法及单元。预先设定每个被监控进程的每个实例对应一个状态文件,且所有状态文件互不重叠;方法包括一个被监控进程的一个实例启动,该实例在自身的状态文件上加互斥锁,并将自身从启动到停止过程中的各个状态信息写入该状态文件中;监控进程从所述被监控进程的所述实例的状态文件中读取状态信息。本发明提高了进程状态监控的准确性、稳定性和通用性。
文档编号G06F11/30GK102200941SQ20101013441
公开日2011年9月28日 申请日期2010年3月25日 优先权日2010年3月25日
发明者李方宁 申请人:杭州华三通信技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1