CN1470992A - 一种对利用共享内存对象记录普通进程异常退出的定位方法 - Google Patents
一种对利用共享内存对象记录普通进程异常退出的定位方法 Download PDFInfo
- Publication number
- CN1470992A CN1470992A CNA021267952A CN02126795A CN1470992A CN 1470992 A CN1470992 A CN 1470992A CN A021267952 A CNA021267952 A CN A021267952A CN 02126795 A CN02126795 A CN 02126795A CN 1470992 A CN1470992 A CN 1470992A
- Authority
- CN
- China
- Prior art keywords
- common process
- shared drive
- drive object
- withdraw
- information
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明涉及对利用共享内存对象记录普通进程异常退出的定位方法。它利用共享内存对象采用环型缓冲区的形式来直接记录各普通进程当前的最新信息,并设置监控进程与普通进程进行定时握手来判断是否有普通进程退出,方便了进程异常退出的定位的问题。另外,由于共享内存对象采用环型缓冲区的形式来保存信息,使保存的信息量大大减少,减少了内存的开销,提高了运行速度。
Description
技术领域
本发明涉及普通进程异常退出的定位方法,具体涉及利用共享内存对象记录普通进程异常退出的定位信息的方法。
现有技术
产品开发中经常存在系统或普通进程突然退出、异常终止的情况,由于普通进程已经整个退出,没有保存有效的信息,现有技术对此缺乏一种行之有效的调试和定位问题的方法。
在目前常用的分时操作系统中,在普通进程间都以提供共享内存的方式来实现普通进程间通信。共享内存的一个特点是当其中一个普通进程退出时,相关的信息并不会被清除,因此我们可以采用写共享内存的方式,记录普通进程退出前所记录的信息,方便定位问题。
目前常用的定位问题的方式有两种:一种是通过分析普通进程退出后的core文件来分析定位问题,该方法的缺点是分析需要相当的专业知识,同时由于core文件是操作系统自动生成的,程序员没有控制权,没办法控制应该记录哪些内容。还有一种常用的办法是记录日志文件,但是由于我们事先不知道什么地方会出问题,所以,为了有效而全面地分析问题,记录的信息量就会非常大,同时记录文件的开销也非常大。进而会严重影响系统的速度。
发明内容
本发明的目的为提供一种速度快切使用方便的对利用共享内存对象记录普通进程异常退出的定位方法。
为了实现上述目的,本发明采取了如下技术方案:
一种对利用共享内存对象记录普通进程异常退出的定位方法,其特征是,该方法包括以下步骤:
一、设置并启动监控进程,监控进程等待普通进程向其注册;
二、启动各普通进程并向监控进程注册,注册成功后为各普通进程分别分配一个单件(Singleton)模式的共享内存对象,各普通进程用与其对应的共享内存对象初始化共享内存;
三、普通进程写共享内存记录运行信息,利用监控进程与普通进程定时握手的方法实时判断是否有普通进程异常退出,如果有,执行步骤四;
四、监控进程读出该异常退出普通进程对应的共享内存对象信息,将该异常退出普通进程对应的共享内存对象信息转储到一个文件中,关闭该异常退出普通进程对应的共享内存对象;
五、监控进程向客户报告异常退出的普通进程,并将转储的信息文件报告给客户。所述步骤三中普通进程写共享内存记录运行信息的方法还进一步包括:
(一)普通进程写共享内存对象,记入最新的运行信息;
(二)共享内存对象利用环型缓冲区将最新写入的信息覆盖以前写入的信息,记录各普通进程的最新信息。
所述步骤三中利用监控进程与普通进程定时握手的方法实时判断是否有普通进程异常退出的方法为监控进程和普通进程定时握手,如果连续多次握手失败,则判断有普通进程异常退出。
由于采用了上述技术方案,所以本发明具有以下优点:
1、由于共享内存对象记录的信息不是系统自动生成的,可读性强,方便了定位,从而解决了现有的对利用共享内存对象记录普通进程异常退出的定位方法需要相当的专业知识而不便于定位的技术问题。
2、由于共享内存对象采用环型缓冲区的形式来保存信息,使保存的信息量大大减少,减少了内存的开销,提高了运行速度。
3、可以采用插装输出语句的技术,记录所有函数调用的入口和出口信息。
附图说明
图1是本发明具体实施方式的整体流程图。
具体实施方式:
如图1所示,一种对利用共享内存对象记录普通进程异常退出的定位方法,包括以下步骤:
一、设置并启动监控进程,监控进程等待普通进程向其注册;
二、启动各普通进程并向监控进程注册,注册成功后为各普通进程分别分配一个Singleton(单件)模式的共享内存对象,各普通进程用与其对应的共享内存对象初始化共享内存;
三、普通进程写共享内存对象,记入最新的运行信息;共享内存对象利用环型缓冲区将最新写入的信息覆盖以前写入的信息,记录各普通进程的最新信息,利用监控进程与普通进程定时握手的方法实时判断是否有普通进程异常退出,即监控进程和普通进程定时握手,如果连续多次握手失败,则判断有普通进程异常退出。如果有,执行步骤四;
四、监控进程读出该异常退出普通进程对应的共享内存对象信息,将该异常退出普通进程对应的共享内存对象信息转储到一个文件中,关闭该异常退出普通进程对应的共享内存对象;
五、监控进程向客户报告异常退出的普通进程,并将转储的信息文件报告给客户,向客户报告有普通进程异常退出可以以图形界面和告警的方式向用户报告。
具体的实现过程中,还要注意以下一些问题:
首先启动监控进程,然后其他普通进程启动并向监控进程注册。在该过程中对每一个普通进程定义一个共享内存对象,由该普通进程在启动时负责初始化共享内存对象,并记录必要的信息。由于在实际的使用过程中,真正需要的只是在普通进程退出前的那一小段时间所记录的信息,因此对共享内存使用环绕方式,即将共享内存分成可容纳几百条消息大小的缓冲区,且规定最新写入的内容覆盖以前写入的内容并在第一条消息中存放当前的写位置,进而确保读出时知道哪一条是最新写进去的,哪一条是最老的。
监控进程和其他普通进程要不断进行握手(双方建立通信的过程),如果监控进程连续数次没有收到一个普通进程的握手信号,就可以判断该普通进程异常退出,连续握手失败的次数可根据需要进行设定,如可设置为两次,也可设定为三次或多次。此时监控进程要负责读出该普通进程对应的共享内存中的信息,并把这些信息转储到一个文件中,关闭共享内存,同时负责向用户报告有一个普通进程异常退出,并把记录下来的信息报告给用户。
实际使用过程中,如果大量手工记录函数的调用信息,那么就有效率低和不易定位的缺点,在本发明中采用源代码插装的方式来组织信息的输出,对源代码进行全面的插装,对每一个函数的入口和出口都进行插装输出语句。这样在普通进程发生异常退出的时候,掉出普通进程退出前的输出信息,就可以很容易地发现普通进程退出前的函数调用过程,方便问题的定位。
采用共享内存的方法,其重点是对普通进程的执行速度不能有明显的影响,因为我们在正常的运行过程中就要一直不断地记录信息,因此必须确保对正常系统的影响尽可能的小。如果对系统的运行速度影响很大的话,这中方法就不可能应用到实际的系统中。因此在实际的使用过程中,必须进行性能优化,确保能有很对的执行速度和比较小的系统开销。
由于目前的操作系统支持多线程的机制,因此就存在多个线程同时写共享内存的可能,如果不进行一定的同步措施,就会导致发生数据不一致,产生严重的运行时错误。但加锁同步是个非常大的开销,对整个的运行速度影响非常大,经过实际测试,光是加锁就会导致开销增大一倍,因此我们的想法是对是否加锁在初始化共享内存时由参数决定。如果是多线程的程序,则一定要加锁,如果是单线程的程序,在执行过程中就不调用加锁操作了。
还有一个需要决定的事情是对写共享内存的行是否需要加上限制,是能写任意长度的内容还是只能写比较短的内容。如果写很长的内容,那么在写共享内存时再进行分行还是干脆进行截断。理论上应该进行分行,这样可以保证信息的完整,但这一部分是速度特别重要的代码,如果要进行分行操作的话,也会在一定程度上影响程序的执行速度,根据实际测试来看大约要影响5%到10%。实际的实现过程中,我们也让用户保留选择的权利,可以在普通进程初始化共享内存时决定是否实现分行。
为了确保每个普通进程中只能有一个共享内存对象,共享内存对象应该用单件Singleton模式来实现,该对象有一个静态成员函数instance,所有对该对象的操作全部通过instance函数接口来实现,确保只能有一个唯一的实例。
Claims (4)
1、一种对利用共享内存对象记录普通进程异常退出的定位方法,其特征是,包括以下步骤:
一、设置并启动监控进程,监控进程等待普通进程向其注册;
二、启动各普通进程并向监控进程注册,注册成功后为各普通进程分别分配一个单件模式的共享内存对象,各普通进程用与其对应的共享内存对象初始化共享内存;
三、普通进程写共享内存记录运行信息,利用监控进程与普通进程定时握手的方法实时判断是否有普通进程异常退出,如果有,执行步骤四;
四、监控进程读出该异常退出普通进程对应的共享内存对象信息,将该异常退出普通进程对应的共享内存对象信息转储到一个文件中,关闭该异常退出普通进程对应的共享内存对象;
五、监控进程向客户报告异常退出的普通进程,并将转储的信息文件报告给客户。
2、根据权利要求1所述的对利用共享内存对象记录普通进程异常退出的定位方法,其特征是,所述步骤三中普通进程写共享内存记录运行信息的方法还进一步包括:
(一)普通进程写共享内存对象,记入最新的运行信息;
(二)共享内存对象利用环型缓冲区将最新写入的信息覆盖以前写入的信息,记录各普通进程的最新信息。
3、根据权利要求1或2所述的对利用共享内存对象记录普通进程异常退出的定位方法,其特征是,所述步骤三中利用监控进程与普通进程定时握手的方法实时判断是否有普通进程异常退出的方法为监控进程和普通进程定时握手,如果连续多次握手失败,则判断有普通进程异常退出。
4、根据权利要求1或2所述的对利用共享内存对象记录普通进程异常退出的定位方法,其特征是,所述步骤五中向客户报告有普通进程异常退出可以以图形界面和告警的方式向用户报告。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 02126795 CN1282926C (zh) | 2002-07-23 | 2002-07-23 | 一种对利用共享内存对象记录普通进程异常退出的定位方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 02126795 CN1282926C (zh) | 2002-07-23 | 2002-07-23 | 一种对利用共享内存对象记录普通进程异常退出的定位方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1470992A true CN1470992A (zh) | 2004-01-28 |
CN1282926C CN1282926C (zh) | 2006-11-01 |
Family
ID=34143396
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 02126795 Expired - Fee Related CN1282926C (zh) | 2002-07-23 | 2002-07-23 | 一种对利用共享内存对象记录普通进程异常退出的定位方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN1282926C (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100359483C (zh) * | 2004-08-27 | 2008-01-02 | 华为技术有限公司 | 后台监控系统及其方法 |
CN100454241C (zh) * | 2006-02-28 | 2009-01-21 | 华为技术有限公司 | 一种在共享内存中存储c++对象的方法及装置 |
CN101166334B (zh) * | 2006-10-18 | 2010-06-09 | 中兴通讯股份有限公司 | 无线通信系统远端射频单元的信息记录的实现方法 |
CN101290587B (zh) * | 2008-06-12 | 2010-06-16 | 中兴通讯股份有限公司 | 一种实现进程启动和监控的方法 |
CN102087612A (zh) * | 2009-12-03 | 2011-06-08 | 腾讯科技(深圳)有限公司 | 一种进程关键数据采集方法及装置 |
CN102129502A (zh) * | 2011-04-26 | 2011-07-20 | 广东省电力设计研究院 | 一种电力线路优化选线方法及其系统 |
CN103150226A (zh) * | 2013-04-01 | 2013-06-12 | 山东鲁能软件技术有限公司 | 计算机模型异常转储与恢复系统及其转储与恢复方法 |
CN104537074A (zh) * | 2014-12-31 | 2015-04-22 | 天津南大通用数据技术股份有限公司 | 一种提高数据库系统写日志性能的方法 |
CN106681651A (zh) * | 2016-05-05 | 2017-05-17 | 安徽南瑞继远电网技术有限公司 | 一种两级缓冲机制的日志管理系统设计方法 |
CN106708705A (zh) * | 2015-07-15 | 2017-05-24 | 腾讯科技(深圳)有限公司 | 终端后台进程监控方法和系统 |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4446373B2 (ja) * | 2003-03-19 | 2010-04-07 | パナソニック株式会社 | プロセッサ、データ共有装置 |
CN100555228C (zh) * | 2006-11-08 | 2009-10-28 | 中兴通讯股份有限公司 | 一种嵌入式linux应用进程的监控方法 |
-
2002
- 2002-07-23 CN CN 02126795 patent/CN1282926C/zh not_active Expired - Fee Related
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100359483C (zh) * | 2004-08-27 | 2008-01-02 | 华为技术有限公司 | 后台监控系统及其方法 |
CN100454241C (zh) * | 2006-02-28 | 2009-01-21 | 华为技术有限公司 | 一种在共享内存中存储c++对象的方法及装置 |
CN101166334B (zh) * | 2006-10-18 | 2010-06-09 | 中兴通讯股份有限公司 | 无线通信系统远端射频单元的信息记录的实现方法 |
CN101290587B (zh) * | 2008-06-12 | 2010-06-16 | 中兴通讯股份有限公司 | 一种实现进程启动和监控的方法 |
CN102087612B (zh) * | 2009-12-03 | 2015-05-20 | 腾讯科技(深圳)有限公司 | 一种进程关键数据采集方法及装置 |
CN102087612A (zh) * | 2009-12-03 | 2011-06-08 | 腾讯科技(深圳)有限公司 | 一种进程关键数据采集方法及装置 |
CN102129502A (zh) * | 2011-04-26 | 2011-07-20 | 广东省电力设计研究院 | 一种电力线路优化选线方法及其系统 |
CN102129502B (zh) * | 2011-04-26 | 2012-10-24 | 广东省电力设计研究院 | 一种电力线路优化选线方法及其系统 |
CN103150226A (zh) * | 2013-04-01 | 2013-06-12 | 山东鲁能软件技术有限公司 | 计算机模型异常转储与恢复系统及其转储与恢复方法 |
CN104537074A (zh) * | 2014-12-31 | 2015-04-22 | 天津南大通用数据技术股份有限公司 | 一种提高数据库系统写日志性能的方法 |
CN106708705A (zh) * | 2015-07-15 | 2017-05-24 | 腾讯科技(深圳)有限公司 | 终端后台进程监控方法和系统 |
CN106708705B (zh) * | 2015-07-15 | 2020-06-16 | 腾讯科技(深圳)有限公司 | 终端后台进程监控方法和系统 |
CN106681651A (zh) * | 2016-05-05 | 2017-05-17 | 安徽南瑞继远电网技术有限公司 | 一种两级缓冲机制的日志管理系统设计方法 |
Also Published As
Publication number | Publication date |
---|---|
CN1282926C (zh) | 2006-11-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1282926C (zh) | 一种对利用共享内存对象记录普通进程异常退出的定位方法 | |
KR102521959B1 (ko) | 분산형 하드웨어 트레이싱 | |
US6718484B1 (en) | Debugging method and apparatus for multitask programs and recording medium storing a program realizing the debugging method and apparatus | |
CN107111544B (zh) | 生产诊断中的历史控制流可视化 | |
CN106462484B (zh) | 云中的分布式流处理 | |
CN1248114C (zh) | 一种软件内存泄露的检查方法 | |
US8418149B2 (en) | Differential comparison system and method | |
US20120066378A1 (en) | Generic, multi-instance method and gui detection system for tracking and monitoring computer applications | |
US20060167955A1 (en) | Non-intrusive method for logging of internal events within an application process, and system implementing this method | |
CN1996257A (zh) | 对进程进行监控的方法和系统 | |
US5333304A (en) | Method and apparatus for software application evaluation utilizing compiler applications | |
CN103488563A (zh) | 并行程序的数据竞争检测方法、装置及多核处理系统 | |
CN1400529A (zh) | 一种实时嵌入系统的故障定位方法 | |
US20070283330A1 (en) | Method and System for Performing Thread-Specific Display of Breakpoints | |
US7493615B2 (en) | Apparatus and method for synchronizing multiple threads in an out-of-order microprocessor | |
CA2383832A1 (en) | System and method for intelligent trap analysis | |
Leu et al. | Efficient execution replay technique for distributed memory architectures | |
Fabre et al. | Building dependable COTS microkernel-based systems using MAFALDA | |
JPH04229340A (ja) | 共用メモリマルチプロセッサコンピュータのデバッグシステム | |
CN1180551C (zh) | 一种程序状态的故障定位方法 | |
CN1555526A (zh) | 用于流水线处理器的监测点引擎 | |
Heikkinen et al. | LOGDIG log file analyzer for mining expected behavior from log files. | |
Ronsse et al. | Rolt/sup MP/-replay of Lamport timestamps for message passing systems | |
CN110377494A (zh) | 一种解决cpu优化引发的多线程问题的方法及系统 | |
CN114363048A (zh) | 一种拟态未知威胁发现系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20061101 Termination date: 20160723 |