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

一、问题现象:

生产环境部署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程序进行了修改导致的,导致没有尝试排查问题,所以,以后遇到问题,不要轻易怀疑很成熟的基础组件。

生产环境部署springcloud微服务启动慢的问题排查的更多相关文章

  1. 十一、Docker搭建部署SpringCloud微服务项目Demo

    环境介绍 技术选型:SpringCloud&SpringCloud Alibaba&Docker 微服务模块划分: 员工模块:ems-employees 部门模块:ems-depart ...

  2. Devops 开发运维高级篇之Jenkins+Docker+SpringCloud微服务持续集成(上)

    Devops 开发运维高级篇之Jenkins+Docker+SpringCloud微服务持续集成(上) Jenkins+Docker+SpringCloud持续集成流程说明 大致流程说明: 1) 开发 ...

  3. Devops 开发运维高级篇之Jenkins+Docker+SpringCloud微服务持续集成——部署方案优化

    Devops 开发运维高级篇之Jenkins+Docker+SpringCloud微服务持续集成--部署方案优化 之前我们做的方案部署都是只能选择一个微服务部署并只有一台生产服务器,每个微服务只有一个 ...

  4. 第四百零二节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署,uwsgi安装和启动,nginx的安装与启动,uwsgi与nginx的配置文件+虚拟主机配置

    第四百零二节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署,uwsgi安装和启动,nginx的安装与启动,uwsgi与nginx的配置文件+虚拟主机配置 软件版本  uwsgi- ...

  5. SpringCloud微服务学习笔记

    SpringCloud微服务学习笔记 项目地址: https://github.com/taoweidong/Micro-service-learning 单体架构(Monolithic架构) Mon ...

  6. Java生鲜电商平台-SpringCloud微服务架构中核心要点和实现原理

    Java生鲜电商平台-SpringCloud微服务架构中核心要点和实现原理 说明:Java生鲜电商平台中,我们将进一步理解微服务架构的核心要点和实现原理,为读者的实践提供微服务的设计模式,以期让微服务 ...

  7. SpringCloud微服务基础学习

    看了蚂蚁课堂的微服务学习,确实学习了不少关于微服务的知识,现在总结学习如下 : SpringCloud微服务基础单点系统架构传统项目架构传统项目分为三层架构,将业务逻辑层.数据库访问层.控制层放入在一 ...

  8. 08 . Jenkins之SpringCloud微服务+Vue+Docker持续集成

    简介 大致流程 /* 1.开发人员每天把代码提交到Gitlab代码仓库 2.jenkins从gitlab中拉取项目源码,编译并打包成war包,然后构建Docker镜像,将镜像上传到Harbor私有仓库 ...

  9. springcloud微服务实战:Eureka+Zuul+Feign/Ribbon+Hystrix Turbine+SpringConfig+sleuth+zipkin

    相信现在已经有很多小伙伴已经或者准备使用springcloud微服务了,接下来为大家搭建一个微服务框架,后期可以自己进行扩展.会提供一个小案例: 服务提供者和服务消费者 ,消费者会调用提供者的服务,新 ...

随机推荐

  1. vue-admin-element 页面跳转

    1.通过router-link 进行跳转 <router-link to="/china-quotation/business-function/quotation-request&q ...

  2. 开源自己编写的半人工标注平台PaddleOCRLabel(.NET Winform版本)

    大家好, 我是博客园的老用户了,许久不做.NET技术了,从2013年起,开始从事App技术,写过书,在Linux上搭建区块链,用GO写智能合约,使用nodejs搭建过微服务,用python写过爬虫,写 ...

  3. expression动态构成

    http://blog.csdn.net/tastelife/article/details/7340205 http://blog.csdn.net/tastelife/article/detail ...

  4. 利用nginx 来实现内网yum源(反向代理)

    简介 在项目部署时,尤其是在政府企业,对于外网简直是奢望,但是对于运维来说,没有外网的话只能自建yum源.我今天来说的是一种简单的自建yum源方法,前提是必须有一台内外网都有的机器,我们一般称为前置机 ...

  5. c++ if语句讲解&例题

    一.if语句 1.基本语法: if(条件 布尔型){ 当条件符合执行的语句 } 2.例子: #include <iostream> using namespace std; int mai ...

  6. PHP中的一些杂项函数学习

    今天来学习的这些杂项函数在官方文档中都是放在一个杂项扩展中的,其实这些函数都并不是什么什么特别的扩展,也不需要安装什么东西就可以使用,它们就是一些简单的功能函数而已.当然,其中不少内容也是我们经常会使 ...

  7. php move_uploaded_file保存文件失败

    move_uploaded_file保存失败后找错,先使用了try catch,但是没输出信息,才知道该函数在php中是警告属于error,不属于exeption,因此不能通过简单的if(!...)处 ...

  8. 一文让你彻底理解SQL连接查询

    表结构 内连接 笛卡尔积问题 普通内连接:inner join on 隐式内连接: 外连接 内连接与外连接查询的区别 内连接查询是查询两张表交集的数据,主外键关联的数据. 左连接查询是查询左表中的所有 ...

  9. Hibernate 的 <= 出现问题

    问题模拟 select new map( e.name as name , e.salary as salary) from Emplpyee e where e.salary <= :sala ...

  10. 从Gartner与IDC三大行业报告,看国产RPA的市场规模与未来发展

    从Gartner与IDC三大行业报告,看国产RPA的市场规模与未来发展 Gartner与IDC的三份报告,描绘出中国RPA的市场规模与未来宏图 文/王吉伟 近期的国产RPA,可谓捷报频频.三个重量级行 ...