各位坐稳扶好,我们要开车了。不过在开车之前,我们还是例行回顾一下上期分享的要点。

项庄舞剑意在沛公,而咱们上期主要借助应用服务器 Resin 的源码,体验了一次 JMX 的真实应用。鉴于 9012 年的很多攻城狮从未接触过 Resin 应用服务器,咱们也没有挖的太深,点到为止。

今天我们说些什么?先抛个问题:“如何实现 Java 应用进程的状态监控,如果被监控的进程 down 掉,是否有机制能启动起来?”

你或许对问题本身还有点不解,暂不针对问题本身进行作答,先不妨一起体验体验 Resin 应用服务器背后一个有意思的事情。

打开控制台,输入命令 ./resin.sh start 启动 Resin 应用服务器,通过源码启动也未尝不可。启动完毕后,在控制台输入 jps 命令,会发现一些不可告人的秘密。

10597 WatchdogManager

10599 Resin

后台居然启动了两个 Java 进程,先不关心都是干啥用的,我们不妨尝试把 Resin 进程给干掉,先执行 kill -9 10599 命令,然后再次执行  jps 命令,看看效果。

10597 WatchdogManager

10708 Resin

哎呦,确实有些不可思议,Resin 进程又自动起来了,而且进程 ID 变成了 10708。

难道是我们操作有误?那再重新杀一下 Resin 进程,执行 kill -9 10708 命令,然后再执行 jps 命令,确认一下是不是我们操作失误导致的。

10597 WatchdogManager

10765 Resin

天啦撸,Resin 进程 ID 变成了 10765,而且又自动启来啦。

不得不说 Resin 进程真是一个杀不死的小强,面对这种咱们啥也没有做,怎么杀 Resin 应用进程都杀不死,你是否会有好奇,这背后是咋回事?

此时我们再杀一下 WatchdogManager 进程,执行一下  kill -9 10597 命令,然后再执行 jps  命令。

发现 WatchdogManager 进程以及 Resin 的进程全部都消失不见,貌似还真有点意思,但是这背后到底隐藏了什么秘密呢?到底又是怎么做到的呢?

如果这个时候咱们直接钻进 Resin 的源码,你可能会直接疯掉,我们还是先从效果上大胆的去猜一猜。

猜想一:WatchdogManager 进程咱们姑且就认为是掌管丫鬟的大总管,而 Resin 进程相当于 丫鬟,大总管负责下发命令让丫鬟去干活,一旦丫鬟进程 down 掉,大总管进程就下发命令重新启动把丫鬟进程启动起来;

猜想二:如果 WatchdogManager 大总管 down 了,那么被看管的丫鬟由于无法与大总管通讯,丫鬟 Resin 进程也会自动停掉,释放资源,重获新生。

依据实验效果我们大胆的猜想,如上图示意,主要有两件事需要去思考,大总管如何下发命令让丫鬟干活;丫鬟如何与大总管保持联系,一旦联系不上大总管丫鬟就自由了。

其实说的稍微技术一点,那就是大总管进程应该会负责管理丫鬟进程的状态,一旦发现丫鬟进程异常,就尝试让丫鬟重新跑起来;其中丫鬟进程应该与大总管实时保持心跳通讯,一旦通讯失败自身进程就退出。

好了,这期主要通过分析 Resin 应用服务器启动的进程,向你抛了一个大大的砖,不知道你心中是否已经有解决思路,到底该如何实现,我们将会在下期揭开谜底。

如何让Java应用成为杀不死的小强?(上篇)的更多相关文章

  1. 如何让Java应用成为杀不死的小强?(中篇)

    各位坐稳扶好,我们要开车了.不过在开车之前,我们还是例行回顾一下上期分享的要点. 上期我们抛了一个砖:“如何实现 Java 应用进程的状态监控,如果被监控的进程 down 掉,是否有机制能启动起来?” ...

  2. 如何让Java应用成为杀不死的小强?(下篇)

    各位坐稳扶好,我们要开车了.不过在开车之前,我们还是例行回顾一下上期分享的要点. 经过前两期的铺垫及烧脑的分享,我们大概对「如何实现 Java 应用进程的状态监控,如果被监控的进程 down 掉,是否 ...

  3. 一个杀不死的小强,kill进程无效的原因 记录故障排查过程中kill进程无效的分析过程

    今天在处理一个机器异常负载(1000+)的问题,碰到了一个从未碰到过的情况,遇到了一个异常顽固的分子.我使用了所能想到的所有杀进程的方法,却始终无法干掉这个顽固分子,最后终于在谷歌大神的指引下,干掉了 ...

  4. Linux中杀不死的进程

    前段时间,一哥们,去杀Linux服务器的进程,发现kill命令失灵了,怎么杀都杀不死. 然后上网查了下资料,原来是要被杀的进程,成为了僵尸进程. 僵尸进程的查看方法: 利用命令ps,可以看到有标记为Z ...

  5. paip.杀不死进程的原因--僵尸进程的解决.txt

    paip.杀不死进程的原因--僵尸进程的解决.txt 作者Attilax  艾龙,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn ...

  6. 手把手教你写LKM rookit! 之 杀不死的pid&root后门

    ......上一节,我们编写了一个基本的lkm模块,从功能上来说它还没有rootkit的特征,这次我们给它添加一点有意思的功能.我们让一个指定的进程杀不死, 曾经,想写一个谁也杀不死的进程,进程能捕捉 ...

  7. Linux下tomcat的shutdown命令可以关闭服务但是杀不死进程

    Linux下tomcat的shutdown命令可以关闭服务但是杀不死进程 原因: 一般造成这种原因是因为项目中有非守护线程的存在: 解决方案: 一.从Tomcat上解决 方案1:(推荐的方案:因为一台 ...

  8. 不死的小强 .net core 微服务 快速开发框架 Viper 限流

    1.Viper是什么? Viper 是.NET平台下的Anno微服务框架的一个示例项目.入门简单.安全.稳定.高可用.全平台可监控.底层通讯可以随意切换thrift grpc. 自带服务发现.调用链追 ...

  9. 《手把手教你》系列基础篇(九十三)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-上篇(详解教程)

    1.简介 上一篇介绍了POM的基础理论知识和非POM方式写脚本,这篇介绍利用页面工厂类(page factory)去实现POM,通过查看PageFactory类,我们可以知道它是一个初始化一个页面实例 ...

随机推荐

  1. fork他人仓库文件及修改整合

    1.首先使用浏览器打开自己的GitHub地址,并打开即将fork的文件地址(别人的文件地址),在其右上方找到fork选项并点击即可 2.在自己的电脑上创建一个文件夹后使用git bush here的C ...

  2. 小巧开源的 baresip VOIP 项目

    Baresip is a modular SIP User-Agent with audio and video support https://github.com/alfredh/baresip ...

  3. 3L-最好、最坏、平均、均摊时间复杂度

    关注公众号 MageByte,设置星标点「在看」是我们创造好文的动力.后台回复 "加群" 进入技术交流群获更多技术成长. 本文来自 MageByte-青叶编写 上次我们说过 时间复 ...

  4. vector的初始化方式及用法笔记(不断更新)

    vector的初始化方式 1)第一种,类似于数组的方式:vector<string> letter(3);letter[0] = "find";letter[1] = ...

  5. C++:利用全局钩子实现键盘锁

    在家看网课,记笔记不方便.于是就想弄个键盘锁,方便学习(在寝室也好把外接键盘放上去打游戏). 其实这东西挺简单的,就三行代码. HHOOK hk; LRESULT CALLBACK kbproc(in ...

  6. Java内部类的四种分类以及作用介绍

    内部类内容解析 内部类的区分 内部类分别有成员内部类.局部内部类.匿名内部类.静态内部类,接下来将分别介绍. 成员内部类 就是位于外部类成员位置的类.与外部类的属性.方法并列. 成员内部类作为外部类的 ...

  7. WordCount程序(Java)

    Github项目地址:https://github.com/softwareCQT/web_camp/tree/master/wordCount 一.题目描述 实现一个简单而完整的软件工具(源程序特征 ...

  8. spring给容器中注入组件的几种方式

    目录 环境搭建 spring给容器中注入组件 1.包扫描+组件标注注解(@Controller/@Service/@Repository/@Component)适用于把自己写的类加入组件(默认ID类名 ...

  9. Python-时间戳、元组时间的格式、自定义时间格式之间的转换

    一.时间戳.元组时间的格式.自定义时间格式之间的转换 1.下面是三者之间的转换关系: 2.代码如下: import time import datetime print(time.time()) #获 ...

  10. hdu2795billboard线段树

    题目链接:http://icpc.njust.edu.cn/Problem/Hdu/2795/ 题目大意:有一块长方形木板,从上到下被分成h*w的区域,现要将n个长条放进这些区域中,要求从上到下只要后 ...