zoukankan      html  css  js  c++  java
  • 生产环境部署springcloud微服务启动慢的问题排查

    今天带来一个真实案例,虽然不是什么故障,但是希望对大家有所帮助。

     

    一、问题现象:

    生产环境部署springcloud应用,服务部署之后,有时候需要10几分钟才能启动成功,在开发测试环境则没有这个问题。最开始是所有微服务都有这种情况,随着项目周期的进行,zwfw微服务的问题最为突出,每次部署后,需要大概6分钟才能启动,在这6分钟期间,程序没有任何日志,控制台没有任何输出。每次部署都会触发服务不可用的报警。如下:

     

    注:报警是连续2分钟不可用才开始发送。

    二、问题分析过程

    起初怀疑是公司使用的加解密工具Virbox Protector导致的,公司加密程序Virbox Protector毕竟对线上的java可执行程序和待发布的jar包都进行了修改,并且在程序启动前,java首先要对jar包进行解密,势必会造成程序的性能造成影响。但是加密组本着“其他组都没有反馈这个问题,就你们组有问题”的态度,直接将问题踢了回来,导致问题久久不能认真对待。

    2021年9月9日研发人员反馈另外一个微服务,也出现了这种启动慢或者无法启动的问题,问题被再次提出。这次,我决定再重新观察一下这个问题,最起码要找出是加密工具惹祸的证据。

    因为zwfw这个服务能稳定复现,所以就拿这个服务进行分析。

    2.1 zwfw这个微服务

    首先介绍一下zwfw这个服务的背景,这个服务部署在华为云主机上,不具备访问互联网的网络权限。

    2.2 jstack工具介绍

    如果你想知道,当前时间,java都在执行哪些任务,那么就可以使用jstack来观察。jstack,jmap,jstats都是java生态中非常重要的工具,并且是jvm自带的命令。使用jstack 进程号,就能列出这个java进程所有的线程,及线程正在执行的方法栈,默认是将线程栈打印在当前控制台。jstack还可以和操作系统命令top联合使用排查CPU占用高的问题。

    2.3 排查过程

    分析问题之前,首先将这个服务从nacos上面踢下来,防止在调试期间被前端机器调用(因为是直接在生产环境调试)。

    然后将zwfw的进程kill掉,再手工使用命令启动服务。打出执行命令后,日志文件中的日志开始中断。

    然后执行jstack 进程号,打印出来堆栈,结果真是出乎意料,其中主线程的方法栈如下:

     

    比较奇怪,还真是阻塞在项目代码上面。这个问题,之前也有人遇到过,如:https://www.javacodegeeks.com/2015/03/inetaddressimpllookupallhostaddr-slowhangs.html

    因为之前做项目,碰到过多次没有配置hostname导致的dns超时的问题(比如说hession调用),所以根据我的经验,这个只需要修改一下host文件就能解决。

    所以就对本机的hostname增加ip的解析。因为怕应用依赖hostname对应的IP,所以hostname对应的ip,要配置成局域网的真实ip。修改host配置后,问题解决,zwfw启动缩短为正常的10秒以内。

    三、解决方法

    既然是因为解析hostname导致,那最快的解决方法就是增加hostname的解析。也不知道log4j2,为什么必须要这样做。

    1、首先查看本机的hostname,输入hostname命令。

    2、查看本机的ip和ipv6地址,使用ifconfig命令。

    3、编辑/etc/hosts文件,增加hostname的解析,问题解决

    四、问题回顾和总结

    团队之间互相踢皮球不配合导致这个问题持续的时间比较长。我一开始一直认为是公司对java程序进行了修改导致的,导致没有尝试排查问题,所以,以后遇到问题,不要轻易怀疑很成熟的基础组件。

     其实很多生产环境的故障,我们都可以避免。下面是我在互联网系统中总结的一些其他案例,如需自取

     做支付遇到httpclient的大坑

     记一次自动恢复的故障

     

    如果你想得有关我的更一手的更新,请关注

     

  • 相关阅读:
    第二阶段冲刺第四天
    第二阶段冲刺第三天
    第二阶段冲刺第二天
    第二阶段冲刺第一天
    软件工程结对作业01(补充)
    软件工程概论个人总结
    梦断代码阅读笔记06
    梦断代码阅读笔记05
    构建之法阅读笔记04
    构建之法阅读笔记01
  • 原文地址:https://www.cnblogs.com/donlianli/p/15477943.html
Copyright © 2011-2022 走看看