应用发布失败排查

发布于 2023-06-26  303 次阅读


一 排查思路
  • 平台错误提示
    • 发布平台获取错误信息(平台会有相关发布失败信息,用于辅助排查问题+8000咨询提供给值班同事,便与值班同事定位问题)
  • 应用程序是否启动
    • 查看进程是否存在

ps -ef|grep 应用名称

  • 业务日志排查
    • 查看控制台日志/home/publish_product/server_java/${application}/${version}/logs/stdout.log,主要输出启动过程中输出到终端的日志,应用启动失败,首要看这个日志(prod不生成,每次启动成功会删除,启动过程中去查看
    • 框架error日志

(/home/product/logs/${application}_logs/frame/error_dubbo_framework.log,在框架层面记录下来的日志,一般启动失败,在这里也会有错误信息,不止是启动失败,应用运行过程中出现错误,也可以先去这个日志文件查看。)

    • 运维通道cli日志

(/var/log/cli.log从发布系统执行命令后,运维通道调用启动脚本过程中输出的日志)

    • 操作系统日志

(/var/log/message, 如果应用启动是申请的内存超过了OS 可用的内存,那么操作系统出于自我保护,会直接kill掉应用进程,同时会记录Kill process的日志,如果是docker进程,日志是记录在宿主机上)

    • dolphin启动日志

 /home/product/logs/{应用名_logs}/dolphin-executor-error.log

二 常见问题汇总
1 虚拟机类
1.1 代码异常问题

问题现场

解决方案

  • 业务jar包类找不到
    • 排查jar包是否存在,业务自行结合代码解决
  • 集团架构提供的组件jar包类找不到
    • base_component_all、dolphin等咨询架构同事辅助解决
1.2 健康检查不通过问题

问题现场

解决方案

  • 查看业务日志,确认是否有异常 , ps -ef |grep 应用名 查看进程是否存在(如果日志没明显错误且进程存在,则排查端口)

  • 端口是否启动(以下两种都可以查看端口暴露情况)
    • netstat -nlpt
    • telnet 127.0.0.1 应用rpc端口
      • 端口没暴露
        • 本地启动,看看端口是否暴露,本地调试解决问题(一般是dubbo-provider.xml文件中没有暴露的服务,没服务及时是dubbo应用,端口也不会启动)
      • 端口暴露
        • 说明程序正常运行 & 端口号暴露 ,但是启动耗时过程
          • 排查应用启动过程中是否有异常,导致启动耗时过长。如果没问题,业务启动耗时变成是正常的,可以调整应用发布超时时间
1.3 获取动态参数异常问题

问题现场

解决方案

  • 查看应用jvm参数是否配置

    • 若jvm参数未配置
      • 配置对应环境jvm参数后,重新发布即可
    • jvm参数已配置
      • 查看app.properties里的application.name是否等于应用名
        • 不等于,则修改保持一致
        • 等于&jvm参数配置了,则重试几次,若几次还不行,咨询8000,问乐效值班同事
1.4 发布失败,缺少启动脚本文件

问题现场

解决方案

  • 确认是否需要启动脚本文件
    • 启动类应用(需要)
      • java
      • go
      • python
      • c/c++
      • nodejs
    • 非启动类应用(不需要)
      • config
      • static
  • 启动类解决方案(补全缺少脚本文件,参考通组其他工程)

  • 非启动类解决方案

1.5 发布失败,服务未启动问题

问题现场

问题原因

  • restart脚本复用了shell上下文,stop脚本exit 1时,会退出shell上下文,导致start脚本不执行

类似案例:

(查看工程restart.sh脚本,核对真实执行启动脚本)

解决方案

  • 临时方案:乐效启停页面,先把应用程序启动
  • 长期方案:修改restart脚本实现
1.6 发布失败,后端服务超时未回应问题

问题现场

问题原因

  • 调用cli通道执行发布操作,cli通过没响应,可以登录机器,查看/var/log/cli.logs

解决方案

  • 查看cli日志,分析是否cli返回有延迟
  • 重试(若重试还不行,找8000咨询乐效值班)
1.7 发布失败,提示check old xxxx failed问题

问题现场

解决方案

联系8000找架构处理,组件包检测不通过

1.8 发布失败,实际应用程序启动成功

问题现场

问题原因

  • start脚本自定义了发布检测超时时间,检测逻辑不通过,导致发布失败

解决方案

  • 调整自定义检测超时时间
1.9 发布失败,后端服务超时未回应,命令超时

问题现场

问题原因

  • 推送、发布实际真实执行过程:乐效调用cli服务器,把推送、发布脚本“推送”到宿主机上,然后在宿主机上执行脚本,返回执行结果
  • 如果脚本执行异常,没有回调发布系统,页面会显示命令超时
  • 如果脚本执行成功or失败,会返回对应信息,在乐效上会看到对应状态和信息提示

排查过程

  • 登录部署机器,监听cli执行过程日志(tail -f /var/log/cli.log)
  • 乐效重试推送or发布操作,在cli日志中会输出脚本执行过程日志

解决方案

  • 重试
  • 联系8000值班
2 容器发类

 


她喜欢所以就做咯