王飞飞,杨好利
(平顶山学院 河南 平顶山 467000)
基于RMI的AIX进程监控系统是一个对进程资源进行远程管理的应用程序。利用Windows下客户端连接到AIX服务器,管理、控制AIX下的进程资源,不仅有效地提高了系统运行的稳健性,并且极大程度降低对系统操作人员的技术要求[1-3]。本系统完成了在Windows下操作AIX服务器进程的功能,实现了对服务器进程启动、停止、监控、实时显示进程信息的功能。通过服务器端的配置文件,可以灵活的控制系统监控的范围,更好的适应用户的需求。
AIX进程监控主要实现对AIX服务器上运行的指定进程的远程监控和管理。本系统采用一对多的C/S模式,支持多客户端登录。其中,客户端运行在Windows上,主要负责接收并显示服务端发送的进程运行信息,并且向服务器发送用户的启动进程、终止进程请求、修改配置信息的请求;服务端运行在AIX服务器上,负责定时获取进程运行信息,响应客户端的请求;客户端和服务器端采用RMI机制进行消息通信[4-5]。系统网络架构图如图1所示。
服务器端,由操作员启动进程监控系统或是在AIX系统启动时自动启动系统。启动之后实时的对进程进行监控和更新进程信息。客户端可以调用系统中的远程方法实现启动进程、启动所有进程、结束进程、结束所有进程、配置管理、获取进程信息的功能。
图1 系统网络架构图Fig.1 Systems network architecture figure
在客户端,由操作员启动客户端,客户端连接到服务器获得一个远程对象,然后启动一个进程,以设置的时间间隔从服务器上读取进程信息,刷新界面上的进程信息列表。操作员可以在界面上执行启动进程,启动所有进程,结束进程,结束所有进程管理配置文件功能。这些功能在服务器上实现,并提供相应的服务,供客户端调用。客户端用例如图2所示。
图2 客户端用例Fig.2 Client use case
系统流程分为客户端流程和服务器流程。
1.3.1 客户端流程
在客户端界面上提供的功能为:
1)启动进程操作:如果在列表中的进程没有被启动,则可以启动进程。
2)结束进程操作:结束指定的进程,如果进程已经结束,则不执行任何操作。
3)显示进程信息,显示服务器上正在运行的进程信息。进程通过远程方法开启一个新的线程,一直更新配置文件中指定的进程。
为完成以上功能,进一步确定系统流程如图3所示。用户开启客户端后首先输入服务器的IP和PORT连接到服务器,并查找远程对象,取得远程对象后,利用远程方法调用来实现客户端管理服务器端的功能。
图3 客户端处理流程Fig.3 Client processing flow
1.3.2 服务器流程
监控程序启动后首先从配置文件读取进程配置信息,确定需要监控的可执行程序所在路径、启动命令及启动失败后的进程最大重启次数。然后创建可以供客户端调用的远程对象并注册到RMI远程对象服务器中等待客户端调用,当客户端发送一个调用请求时,服务器会执行不同方法,然后返回执行的结果[6-7]。执行简单流程如图4所示。
图4 服务器流程Fig.4 Server processing flow
在远程对象当中,客户端程序只能调用公开的方法,在服务器的实现中,具体实现这些接口。来完成特定的功能。然后根据程序利用Java的系统工具来生成桩 (Stub)和框架(Skeleton)文件,以便注册到RMI命名服务,它允许客户端去发现这个远程服务。在客户端也应该存在相应的桩(Stub)和框架(Skeleton)文件[8]。
RMI接口的说明,服务器首先定义远程的接口,公开这些接口可以让客户端来调用,公开接口说明了服务器实现的功能和提供的服务,客户端只能访问接口中指定的功能和服务。根据程序需求和功能的定义,在程序中设计接口主要分为进程监控和配置管理两部分[9-10]。
2.1.1 RMI接口定义
1)进程监控接口
进程监控接口完成对进程的操作和进程信息的获取的进行说明,简要说明如下:
①查询进程的信息.
②根据进程名结束进程,开启进程
③ 开启所有进程,根据进程名结束所有进程,根据进程名启动所有进程。
2)配置文件管理接口
接口主要包括对进程监控配置文件的读取和设置,管理对各个进程是否监控以及进程不正常时重新启动的次数。
2.1.2 进程信息结构
实时监控进程,在获得进程的信息后把数据放入一二维数组中,服务器端开启一服务器进程,客户端可以通过服务器提供的服务读取进程信息,显示在客户端。在此数组中共有13列,各列的定义为:进程名,进程号(PID),参数CPU,参数为CPU利用率或者称为%CPU参数为CPU利用率或者称为%CPU,进程的CPU占用时间,启动时间,内存利用率,物理内存使用情况,虚拟内存使用情况,用户名,进程状态,是否自动重启,进程重启次数。
2.2.1 实时监控
实时监控是系统的主要功能。实现进程监控,如果处于监控状态的进程异常终止,并且同时重启次数没有超过指定配置,则实时监控线程会自动启动该进程,且在该过程中实时更新进程信息,以便客户端查询显示。监控算法流程:实时监控进程以固定时间间隔运行,在一次操作开始,首先调用shell脚本获取所有进程的信息列表(ps表)。从ps列表中读取一条信息,在进程保存的进程信息列表(data表)查询匹配项(具有同样的pid)。如果匹配,判断信息是否完整,如果完整则更新data列表,否则进程信息获得异常,置进程信息为“-”。如果查找data列表直至结尾没有找到,则从ps列表中读取下一条数据进行匹配操作,直到ps列表到达结尾或data表被完全更新。
在上一个操作结束后判断data表是否完全被更新。如果是,则说明程序全部运行正常,否则说明某些进程不存在。如果有进程不存在,则判断标志位是否为“T”。如果是,再判断重启次数是否大于配置文件指定的最大重启次数,如果不大于则启动进程,并设置重启次数=重启次数+1。如果标志位为“F”或是重启次数大于配置文件指定的最大重启次数则无任何操作。重复处理直到所有data表中的数据处理完毕。
经过如上操作,则完成了一次实时监控的进程扫描和进程信息更新操作。
2.2.2 启动功能
系统利用Java系统的ProcessBuilder来启动进程,启动成功,则更新监控列表中的进程标志和进程PID部分,以便在监控和操作中使用。在启动时置进程监控标志位为“T”,在服务器的实时监控中对其进行监控,同时复位进程重启次数为0。启动完毕,在日志文件中记录。在启动所有的进程操作中,创建多个线程来调用启动单个进程的方法来启动所有的进程,使用线程提高程序的效率。功能核心代码如下:
1)创建一个ProcessBuilder对象,参数为要启动的进程命令行启动命令。
2)设置启动的目录,在配置文件中指定为taskPath。
3)调用 ProcessBuilder对象的 start()启动程序,生成一Process对象。
4)获得Process对象的 InputStream,读取被启动进程的输出。默认第一行为进程的pid,在进程列表data表中记录进程pid。
5)设置进程的标志位为“T”,重置重启次数为0。
6)以上操作完成了启动一个进程的过程。如果启动读不到进程的信息则由实时监控程序通过进程名来查找进程pid。
2.2.3 结束功能
采用系统的底层“kill-9 pid”命令来结束一个进程,结束进程的流程和启动进程相似,只在开始构造ProcessBuilder时传递不同的参数。结束的同时,设置结束进程的标志位为“F”,表示此进程正常结束,实时监控进程不再对其进行监控,不会因为进程的结束而重新启动此进程,并重置进程重启次数为0。在启动功能和结束功能的操作过程中都设置系统的互斥信号量,保证监控操作和启动操作,结束操作之间不会有冲突的发生。
2.2.4 配置管理
为提高程序的可移植性和可扩展性,本系统将进程监控的相关信息保存在服务端的Montior.conf配置文件中。该配置文件中包含子系统的安装目录和进程名,进程启动命令以及是否监控,同时定义了子系统不正常时的重启次数。
为了提高程序的可维护性,和灵活性。系统在客户端为用户提供了图形化的配置管理功能,该功能利用RMI远程方法调用实现对远程服务器上配置文件的修改。
AIX进程监控系统是基于C/S架构的应用程序,主要实现用户启动单个或多个进程、结束单个或多个进程、监控进程的功能,程序具有很好的配置性和可扩展性,系统运行稳健性得到提高,同时降低了对系统操作人员的技术要求,但由于不同的系统采用的ps有不同的实现,程序的可移植性受到一定限制。
[1](美)Paul Love,Joe MerLino,等著.Unix入门经典[M].张楚雄,许文昭,译.北京:清华大学出版社,2006.
[2](美)Ellie Quigley,著.Unix Shell范例精解[M].3版.刘洪涛译.北京:清华大学出版社,2004.
[3](美)Amir Afzal,著.Unix初级教程[M].4版.李石君,曾平,陈爱莉,等译.北京:电子工业出版社,2007.
[4]蔡敏,徐慧慧,黄炳强,编著.UML基础与Rose建模教程 [M].北京:人民邮电出版社,2006.
[5]王少锋.UML面向对象技术教程[M].北京:清华大学出版社,2004.
[6]刘楠,金护平.RMI分布式对象技术的研究与应用[J].航空计算技术,2009,39(01):142-145.
LIU Nan,JIN Hu-ping.RMI distributed object technology researchandapplication[J].AeronauticalComputingTechnique,2009,39(1):142-145.
[7]杨文嘉,夏士雄.基于Java RMI对等交互模型的研究与实现[J].微计算机信息,2008,24(3):194-195,155.
YANG Wen-jia,Xia Shi-xiong.Research and realization of P2P interaction model based on Java RMI[J].Microcomputer Information,2008,24(3):194-195,155.
[8]高雅侠,邹海荣.基于Java的RMI技术的研究与应用[J].计算机与数字工程,2011,39(8):174-177.
GAO Ya-xia,ZOU Hai-rong.Research and application of RMI technology based on java[J].Computer& Digital Engineering,2011,39(8):174-177.
[9]吕锋,鲍刚.基于客户端缓存提高Java RMI性能的方法[J].计算机工程与设计,2008,29(17):4450-4452,4457.
LV Feng,BAO Gang.Method for Java RMI based on client cache with improved performance[J].Computer Engineering and Design,2008,29(17):4450-4452,4457.
[10](美)Brett Spell著.Java高级教程[M].2版.董梁,刘艳,译.北京:清华大学出版社,2006.