日常Bug排查-流量全部下线
前言
日常Bug排查系列都是一些简单Bug排查,笔者将在这里介绍一些排查Bug的简单技巧,同时顺便积累素材^_^。
Bug现场
一次快速发布,确导致业务跌0,还好是个小业务,不然就GG了。
流量全部下线
由于我们发布分为两组,在第二组发布的时候,业务跌0。很明显的,第一反应就是,第一组发布后流量并没有上线成功,导致第二组流量下线的时候,产线没有任何服务器提供服务。
为什么第一次发布时候没有发上去
笔者详细的检查了一下发布的过程。发现我们的发布脚本是在tomcat启动脚本运行完毕之后检查进程是否存在。如果存在,就表明应用启动成功。然后就上线流量!
tomcat容器启动成功不代表应用准备完毕
这一看就发现了问题,tomcat容器启动是几秒内就能Okay的(外置的tomcat)容器。但是tomcat启动并且进程存在并不代表应用准备就绪了。因为这时候Spring还在加载,如果是dubbo应用的话,往zookeeper的临时节点都还没注册,当然上线流量会失败!
为什么会犯这种错误
因为这个应用原来是用jboss容器启动的,jboss容器的启动脚本会等内部应用准备就绪之后才会返回。迁移到tomcat之后,tomcat脚本不等内部应用启动成功就返回。进而让发布者以为"发布"成功了!
应该怎么做
在这种情况下,我们需要在tomcat容器中提供checkHealth这样的接口,在checkHealth中检查各种资源信息。等脚本checkHealth通过后,才能确认应用准备完毕。
总结
在jboss往tomcat迁移中。这是个很常见,但确很容易导致重大问题的坑。
评论