进程(程序)僵死问题解决方法

近段时间听说了不少项目组的运营程序在春节期间僵死了,由于大都回家了,处理时间响应较长。最主要的还是因为僵死程序没能及时发现,特别是程序在深夜时间段内僵死,基本上都要到早上才被发现,导致系统长时间僵死而不能正常处理业务数据,影响客户的正常业务需求,甚至造成损失。

如何解决程序僵死后的修复重启问题,常见的解决方法就是加一个监控程序。那么,如何监控呢?为此,我想到了这下三种解决方案:

1、监控日志变更时间。

一般的运行程序在正常情况下都会有生成处理数据的日志,每一次写或改日志,日志的修改时间都会被向前更改。如果程序僵死了,日志也就没有再发生变化。

由此。我们就能够通过时间变化比较来判断程序是否僵死,如果僵死则执行相应处理操作。


2、监控日志内容大小变化。

程序打印日志时存在这样一种情况,在程序没有日志打印时,日志会定期(通常是1min)打印一句休眠提示信息,这时日志的变更时间在程序僵死时依然会向前变更,第1种解决方法也就不适用了。我们发现日志中的休眠提示信息是有固定格式和大小的,也这是说,日志在程序僵死后内容大小的变更是基本固定在一个值范围内的,由此,我们采用监控日志内容的变化比较值,即在一个监控周期内,如果日志内容增加值小于这个固定值,我们就认为程序已经僵死了(为避免程序没有数据处理时没有日志输出,我们相应地在程序中添加一个小程序,定期向日志文件输出一句信息)。如果比较结果是比较值小于0,那么我们就认为日志发生了备份变更(原来的日志会被备份成另一个文件名,重新生成一个与原文件名一致的文件)。


3、通知监控

在第2种解决方法中,我们说到了”为了避免程序在没有处理数据时被判定为僵死,我们相应地在程序中添加一个小程序,定期向日志文件输出一句信息“。同理,我们在程序中添加一个小程序,它会定期地向监控程序发送一个”活跃“信息,证明它所在的程序处理正常状态,若程序僵死则小程序就无法再发出”通知“,监控程序就判断被监控程序已经处于僵死状态。


有读者可能会这样想,如果监控程序也僵死了怎么办?

确实,我们不能保证监控程序就能一直正常地监控下去,为此,我们可以再增加一个监控程序。我们这样做的目的是为了让两个监控程序相互监控对方是否”还活着“,若有一个僵死了,另一个就把对方”救起来“。当然,这两个监控程序只能有一个用来监控被监控程序,以免处理僵死操作时发生冲突。

猜你喜欢

转载自blog.csdn.net/lanwuchun/article/details/43964461
今日推荐