【这是一猿小讲的第 47 篇原创分享】
各位坐稳扶好,我们要开车了。不过在开车之前,我们还是例行回顾一下上期分享的要点。
项庄舞剑意在沛公,而咱们上期主要借助应用服务器 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应用监控利器JMX(1)
老技术新谈,Java应用监控利器JMX(2)
老技术新谈,Java应用监控利器JMX(3)
一篇文章讲透线上应用监控
原文 http://mp.weixin.qq.com/s?__biz=MzU2MDg5NzYzNA==&mid=2247484332&idx=1&sn=623609f138dc148596f5646549cc0fa9