生产环境应用时好时坏

生产环境应用时好时坏


异常描述

  • 系统现状:手动发版方式,依次执行 build beta host
    • build 执行打包,重新编译 war 包
    • beta 发布备机,将主机从 nginx 中移除
    • host 发布主机,将备机从 nginx 中移除
    • 双机部署,但不是双机轮训,而是主从部署,因为 nginx 与 主机部署于同一台机器;换句话说如果主机出现问题,则整个服务瘫痪
  • 本次修改内容很少,修改静态页面及两行代码
  • 项目发版后,测试验收通过;产品验收通过
  • 于是去开会
  • 两分钟后测试来找,出现问题;问题描述如下:
    • 提示下单异常,项目中增加了一个异常的抛出,如果商品的标识不是指定的三种标识之一,提示商品不是本次指定的赠品,防止恶意下单
    • 发生异常的代码不是本次修改的内容,而是以前的内容;本次增加判断增加第三种情况;旧的代码未被改掉,新的代码未生效
      • 发版失败,war包没有被替换
      • 遗漏机器,有的机器没有发布,没有替换最新war包
    • 检查数据,无误,group by description 就三种标识,没有第四种情况
    • 检查代码,无误,改动量十分的小,原来是两种赠品,现增加了一种,加了一段 if else
  • 页面数据是否有缓存或结算接口查询数据是否有缓存
    • 查找KEY值,情况缓存 ;问题依旧
  • 检查发版机器上的WAR包,是否是最新代码
  • 检查发版机器是否启动正常
    • 检查 tomcat catalina.log 是否正常
  • 联系运维确认当前服务部署机器台数
    • 两台
  • 查看dubbo 服务注册中心–当前服务
    • 显示服务注册机器数量三台
  • 对照IP地址及NGINX中备注掉的配置信息,确认问题原因如下
    • 双十一期间为了服务器压力过大,增加了一台部署机器
    • 双十一结束备机被运维移除,但只是从ngnix 中移除,没有停机处理
    • 备机的Tomcat依然在运行,dubbo 服务注册中心,依然有该机器的服务注册,
    • 所以就会出现上述问题,请求服务时好时坏

异常反思

  • 问题调试三个小时,虽然也想到了,是有一台机器没有发布,我将其中一段代码完全注释掉,但生产环境居然报错,错误的原因就是注释掉的代码生效了,由此判断是有一台机器没有发布成功
  • 但是太执着了,多次和运维确认是两台机器后,只检查了当前的两台机器,多次验证服务
  • 服务验证前八次都成功,以为没问题了,让测试验证,不巧的时,一次就失败,很尴尬,问题还是没有好
  • 不要慌乱,出现一些其他问题就跑偏,重启过程中出现
    • failed - POSSIBLE BREAK-IN ATTEMPT!
    • 于是各种找问题
  • 寻求帮助,多个人一起看

举一反三

  • 出现服务调用时好时坏的问题排查步骤
    • 初步判断原因:机器中部署的代码不一致
    • 检查 dubbo 服务注册中心,当前服务注册数量及每台机器IP地址
    • 检查 nginx 配置,确认是否有机器是不需要的,是否是临时部署的
    • 如果发现时其他备机的,ssh -p ip 免密登录,kill 调用 java 进程或 cd tomcat/bin ,执行 shutdown.sh ,jps 检查执行结果
    • 如果不是上述问题,检查tomcat 中部署的war包是否有最新代码
    • 是否是war包没有删除掉,手动执行war包替换
    • 是否发版过程中进程kill失败,手动kill进程,重启服务

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值