一种对利用共享内存对象记录普通进程异常退出的定位方法

文档序号:6584229阅读:989来源:国知局
专利名称:一种对利用共享内存对象记录普通进程异常退出的定位方法
技术领域
本发明涉及普通进程异常退出的定位方法,具体涉及利用共享内存对象记录普通进程异常退出的定位信息的方法。
在目前常用的分时操作系统中,在普通进程间都以提供共享内存的方式来实现普通进程间通信。共享内存的一个特点是当其中一个普通进程退出时,相关的信息并不会被清除,因此我们可以采用写共享内存的方式,记录普通进程退出前所记录的信息,方便定位问题。
目前常用的定位问题的方式有两种一种是通过分析普通进程退出后的core文件来分析定位问题,该方法的缺点是分析需要相当的专业知识,同时由于core文件是操作系统自动生成的,程序员没有控制权,没办法控制应该记录哪些内容。还有一种常用的办法是记录日志文件,但是由于我们事先不知道什么地方会出问题,所以,为了有效而全面地分析问题,记录的信息量就会非常大,同时记录文件的开销也非常大。进而会严重影响系统的速度。
为了实现上述目的,本发明采取了如下技术方案一种对利用共享内存对象记录普通进程异常退出的定位方法,其特征是,该方法包括以下步骤一、设置并启动监控进程,监控进程等待普通进程向其注册;二、启动各普通进程并向监控进程注册,注册成功后为各普通进程分别分配一个单件(Singleton)模式的共享内存对象,各普通进程用与其对应的共享内存对象初始化共享内存;三、普通进程写共享内存记录运行信息,利用监控进程与普通进程定时握手的方法实时判断是否有普通进程异常退出,如果有,执行步骤四;四、监控进程读出该异常退出普通进程对应的共享内存对象信息,将该异常退出普通进程对应的共享内存对象信息转储到一个文件中,关闭该异常退出普通进程对应的共享内存对象;五、监控进程向客户报告异常退出的普通进程,并将转储的信息文件报告给客户。所述步骤三中普通进程写共享内存记录运行信息的方法还进一步包括(一)普通进程写共享内存对象,记入最新的运行信息;(二)共享内存对象利用环型缓冲区将最新写入的信息覆盖以前写入的信息,记录各普通进程的最新信息。
所述步骤三中利用监控进程与普通进程定时握手的方法实时判断是否有普通进程异常退出的方法为监控进程和普通进程定时握手,如果连续多次握手失败,则判断有普通进程异常退出。
由于采用了上述技术方案,所以本发明具有以下优点1、由于共享内存对象记录的信息不是系统自动生成的,可读性强,方便了定位,从而解决了现有的对利用共享内存对象记录普通进程异常退出的定位方法需要相当的专业知识而不便于定位的技术问题。
2、由于共享内存对象采用环型缓冲区的形式来保存信息,使保存的信息量大大减少,减少了内存的开销,提高了运行速度。
3、可以采用插装输出语句的技术,记录所有函数调用的入口和出口信息。


图1所示,一种对利用共享内存对象记录普通进程异常退出的定位方法,包括以下步骤一、设置并启动监控进程,监控进程等待普通进程向其注册;二、启动各普通进程并向监控进程注册,注册成功后为各普通进程分别分配一个Singleton(单件)模式的共享内存对象,各普通进程用与其对应的共享内存对象初始化共享内存;三、普通进程写共享内存对象,记入最新的运行信息;共享内存对象利用环型缓冲区将最新写入的信息覆盖以前写入的信息,记录各普通进程的最新信息,利用监控进程与普通进程定时握手的方法实时判断是否有普通进程异常退出,即监控进程和普通进程定时握手,如果连续多次握手失败,则判断有普通进程异常退出。如果有,执行步骤四;四、监控进程读出该异常退出普通进程对应的共享内存对象信息,将该异常退出普通进程对应的共享内存对象信息转储到一个文件中,关闭该异常退出普通进程对应的共享内存对象;五、监控进程向客户报告异常退出的普通进程,并将转储的信息文件报告给客户,向客户报告有普通进程异常退出可以以图形界面和告警的方式向用户报告。
具体的实现过程中,还要注意以下一些问题首先启动监控进程,然后其他普通进程启动并向监控进程注册。在该过程中对每一个普通进程定义一个共享内存对象,由该普通进程在启动时负责初始化共享内存对象,并记录必要的信息。由于在实际的使用过程中,真正需要的只是在普通进程退出前的那一小段时间所记录的信息,因此对共享内存使用环绕方式,即将共享内存分成可容纳几百条消息大小的缓冲区,且规定最新写入的内容覆盖以前写入的内容并在第一条消息中存放当前的写位置,进而确保读出时知道哪一条是最新写进去的,哪一条是最老的。
监控进程和其他普通进程要不断进行握手(双方建立通信的过程),如果监控进程连续数次没有收到一个普通进程的握手信号,就可以判断该普通进程异常退出,连续握手失败的次数可根据需要进行设定,如可设置为两次,也可设定为三次或多次。此时监控进程要负责读出该普通进程对应的共享内存中的信息,并把这些信息转储到一个文件中,关闭共享内存,同时负责向用户报告有一个普通进程异常退出,并把记录下来的信息报告给用户。
实际使用过程中,如果大量手工记录函数的调用信息,那么就有效率低和不易定位的缺点,在本发明中采用源代码插装的方式来组织信息的输出,对源代码进行全面的插装,对每一个函数的入口和出口都进行插装输出语句。这样在普通进程发生异常退出的时候,掉出普通进程退出前的输出信息,就可以很容易地发现普通进程退出前的函数调用过程,方便问题的定位。
采用共享内存的方法,其重点是对普通进程的执行速度不能有明显的影响,因为我们在正常的运行过程中就要一直不断地记录信息,因此必须确保对正常系统的影响尽可能的小。如果对系统的运行速度影响很大的话,这中方法就不可能应用到实际的系统中。因此在实际的使用过程中,必须进行性能优化,确保能有很对的执行速度和比较小的系统开销。
由于目前的操作系统支持多线程的机制,因此就存在多个线程同时写共享内存的可能,如果不进行一定的同步措施,就会导致发生数据不一致,产生严重的运行时错误。但加锁同步是个非常大的开销,对整个的运行速度影响非常大,经过实际测试,光是加锁就会导致开销增大一倍,因此我们的想法是对是否加锁在初始化共享内存时由参数决定。如果是多线程的程序,则一定要加锁,如果是单线程的程序,在执行过程中就不调用加锁操作了。
还有一个需要决定的事情是对写共享内存的行是否需要加上限制,是能写任意长度的内容还是只能写比较短的内容。如果写很长的内容,那么在写共享内存时再进行分行还是干脆进行截断。理论上应该进行分行,这样可以保证信息的完整,但这一部分是速度特别重要的代码,如果要进行分行操作的话,也会在一定程度上影响程序的执行速度,根据实际测试来看大约要影响5%到10%。实际的实现过程中,我们也让用户保留选择的权利,可以在普通进程初始化共享内存时决定是否实现分行。
为了确保每个普通进程中只能有一个共享内存对象,共享内存对象应该用单件Singleton模式来实现,该对象有一个静态成员函数instance,所有对该对象的操作全部通过instance函数接口来实现,确保只能有一个唯一的实例。
权利要求
1.一种对利用共享内存对象记录普通进程异常退出的定位方法,其特征是,包括以下步骤一、设置并启动监控进程,监控进程等待普通进程向其注册;二、启动各普通进程并向监控进程注册,注册成功后为各普通进程分别分配一个单件模式的共享内存对象,各普通进程用与其对应的共享内存对象初始化共享内存;三、普通进程写共享内存记录运行信息,利用监控进程与普通进程定时握手的方法实时判断是否有普通进程异常退出,如果有,执行步骤四;四、监控进程读出该异常退出普通进程对应的共享内存对象信息,将该异常退出普通进程对应的共享内存对象信息转储到一个文件中,关闭该异常退出普通进程对应的共享内存对象;五、监控进程向客户报告异常退出的普通进程,并将转储的信息文件报告给客户。
2.根据权利要求1所述的对利用共享内存对象记录普通进程异常退出的定位方法,其特征是,所述步骤三中普通进程写共享内存记录运行信息的方法还进一步包括(一)普通进程写共享内存对象,记入最新的运行信息;(二)共享内存对象利用环型缓冲区将最新写入的信息覆盖以前写入的信息,记录各普通进程的最新信息。
3.根据权利要求1或2所述的对利用共享内存对象记录普通进程异常退出的定位方法,其特征是,所述步骤三中利用监控进程与普通进程定时握手的方法实时判断是否有普通进程异常退出的方法为监控进程和普通进程定时握手,如果连续多次握手失败,则判断有普通进程异常退出。
4.根据权利要求1或2所述的对利用共享内存对象记录普通进程异常退出的定位方法,其特征是,所述步骤五中向客户报告有普通进程异常退出可以以图形界面和告警的方式向用户报告。
全文摘要
本发明涉及对利用共享内存对象记录普通进程异常退出的定位方法。它利用共享内存对象采用环型缓冲区的形式来直接记录各普通进程当前的最新信息,并设置监控进程与普通进程进行定时握手来判断是否有普通进程退出,方便了进程异常退出的定位的问题。另外,由于共享内存对象采用环型缓冲区的形式来保存信息,使保存的信息量大大减少,减少了内存的开销,提高了运行速度。
文档编号G06F12/00GK1470992SQ0212679
公开日2004年1月28日 申请日期2002年7月23日 优先权日2002年7月23日
发明者柯猛, 柯 猛 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1