进程守护系统,你懂吗?

简介: 1.什么是进程守护系统?     进程守护系统,用于监控指定的进程,当发现目标进程不再正常工作时,就关闭该进程,并重启它。   在什么情况下使用进程守护系统了?比如说,我们的某个服务器软件,在上线后出现一个严重的bug,该bug虽然很难出现,但是只要一出现,整个服务都会停掉(进程没有崩溃,只是不再提供服务)。

1.什么是进程守护系统?  

  进程守护系统,用于监控指定的进程,当发现目标进程不再正常工作时,就关闭该进程,并重启它。

  在什么情况下使用进程守护系统了?比如说,我们的某个服务器软件,在上线后出现一个严重的bug,该bug虽然很难出现,但是只要一出现,整个服务都会停掉(进程没有崩溃,只是不再提供服务)。此时,重启服务软件,又会开始正常工作。

  对于这样严重的bug,必须要查清楚并解决掉的。但是,基于以下两个原因:

(1)系统已经对用户开放,服务不能停。不可能说系统先下线,直到bug被解决掉后再重新上线。

(2)bug很难重现,可能需要加日志,不断地跟踪排查,这很可能是一场持久战。

   为了让系统继续线上运行,在bug解决之前,必须要保证系统停止服务之后,能迅速重新启动恢复服务。此时,使用进程守护系统是最恰当不过的了。

   OrayGuard就是为达到这一目的,实现了一个进程守护系统。一个守护者程序,可以守护同一台机器上的多个进程。

  

 

2.进程守护系统的实现及使用

   OrayGuard守护者对被守护进程的管理使用的是心跳机制,其原理描述如下:

(1)被守护进程定时向守护者报告(发送心跳),以表明自己是在正常提供服务。

(2)如果守护者发现某个被守护进程连续一段时间都没有心跳过来,就关闭对应的进程,然后再启动对应的程序。

  在OrayGuard系统中,为了方便使用,已经做了很多工作,直接提供如下设施给使用者。

(1)在守护者这一方:提供了可直接运行的exe,双击即可运行起来。

(2)在被守护进程这一方:提供了OrayGuard.Core.dll,使用者只要调用其中的GuardianProxy静态类的几个方法,即可完成所有工作。 

    /// <summary>
    /// 与守护服务进行通信的Proxy,提供给被守护进程直接使用。
    /// </summary>
    public static class GuardianProxy
    {     /// <summary>
        /// 初始化Proxy,并向守护服务注册当前进程。
        /// </summary>
        /// <param name="guardServerPort">守护进程提供服务的Port</param>
        /// <param name="timeoutInSecs">超时间隔。单位:秒</param>
        public static void Initialize(int guardServerPort, int timeoutInSecs);

        /// <summary>
        /// 向守护服务激活当前进程一次。
        /// </summary>
        public static void Activate();

        /// <summary>
        /// 向守护服务注销当前进程。
        /// </summary>
        public static void Dispose();
    }

   在被守护方:

(1)进程启动时,调用GuardianProxy的Initialize方法,即可向守护者注册当前进程。(端口号就填守护者配置文件中设定的端口)

(2)进程内需要定时(比如10秒一次)检测自己是否仍在正常提供服务,如果是,则调用GuardianProxy的Activate方法,向守护者发送心跳。

(3)当进程正常退出时,调用GuardianProxy的Dispose方法向守护者注销。

 

 3.Demo以及下载

  最后,我们编写了一个用于演示的被守护进程的项目,整个系统运行起来后,效果如下:

      

   (注意:实际测试时,不要调试,而是要双击演示项目debug目录下的TestProcess.exe运行演示,否则,模拟故障后,演示进程会被关闭,但是无法被重启。因为,调试时,检测到的是TestProcess.vshost.exe)

   下载 OrayGuard。压缩包中包含如下内容:

(1)OrayGuard守护者:可直接运行的守护者程序。

(2)SDK:供被守护进程使用的SDK。

(3)TestProcess:用于演示的被守护进程的项目源码。

  

 更多分享:打通B/S与C/S !让HTML5 WebSocket与.NET Socket公用同一个服务端!

 

目录
相关文章
|
3月前
|
消息中间件 存储 缓存
【嵌入式软件工程师面经】Linux系统编程(线程进程)
【嵌入式软件工程师面经】Linux系统编程(线程进程)
91 1
|
4天前
|
安全 开发者 Python
揭秘Python IPC:进程间的秘密对话,让你的系统编程更上一层楼
【9月更文挑战第8天】在系统编程中,进程间通信(IPC)是实现多进程协作的关键技术。IPC机制如管道、队列、共享内存和套接字,使进程能在独立内存空间中共享信息,提升系统并发性和灵活性。Python提供了丰富的IPC工具,如`multiprocessing.Pipe()`和`multiprocessing.Queue()`,简化了进程间通信的实现。本文将从理论到实践,详细介绍各种IPC机制的特点和应用场景,帮助开发者构建高效、可靠的多进程应用。掌握Python IPC,让系统编程更加得心应手。
11 4
|
4月前
|
存储 负载均衡 Linux
【Linux 系统】进程间通信(匿名管道 & 命名管道)-- 详解(下)
【Linux 系统】进程间通信(匿名管道 & 命名管道)-- 详解(下)
|
4月前
|
消息中间件 Unix Linux
【Linux 系统】进程间通信(匿名管道 & 命名管道)-- 详解(上)
【Linux 系统】进程间通信(匿名管道 & 命名管道)-- 详解(上)
|
4月前
|
缓存 Linux 调度
【Linux 系统】进程控制 -- 详解
【Linux 系统】进程控制 -- 详解
|
22天前
|
Linux Python
在Linux中,如何查找系统中占用CPU最高的进程?
在Linux中,如何查找系统中占用CPU最高的进程?
|
22天前
|
Linux
在Linux中,如何查看系统上运行的进程?
在Linux中,如何查看系统上运行的进程?
|
2月前
|
运维 关系型数据库 MySQL
掌握taskset:优化你的Linux进程,提升系统性能
在多核处理器成为现代计算标准的今天,运维人员和性能调优人员面临着如何有效利用这些处理能力的挑战。优化进程运行的位置不仅可以提高性能,还能更好地管理和分配系统资源。 其中,taskset命令是一个强大的工具,它允许管理员将进程绑定到特定的CPU核心,减少上下文切换的开销,从而提升整体效率。
掌握taskset:优化你的Linux进程,提升系统性能
|
2月前
|
弹性计算 Linux 区块链
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
61 4
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
|
18天前
|
数据安全/隐私保护 异构计算 Windows
【Azure 环境】 介绍两种常规的方法来监视Window系统的CPU高时的进程信息: Performance Monitor 和 Powershell Get-Counter
【Azure 环境】 介绍两种常规的方法来监视Window系统的CPU高时的进程信息: Performance Monitor 和 Powershell Get-Counter