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

一、问题现象:

生产环境部署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. MAC地址知识

    1. 全球唯一无法保障. 软件工具可以修改网卡的MAC地址 2.不需要全球唯一. 只要保障局域网内不重复就行.    路由器 保证 数据在不同局域网内跳转.   如果局域网内使用集线器,那么可以设置相 ...

  2. U2-关系数据库

    2.1 关系数据结构及形式化定义 关系数据库系统是支持关系模型的数据库系统.(关系模型由关系数据结构.关系操作集合和关系完整性约束三部分组成) 2.1.1 关系 1-域 域是一组具有相同数据类型的值的 ...

  3. jmeter压测学习12-设置持续压测时间(调度器的使用)

    前言 使用jmeter 做压测的时候,希望对一个接口持续压测 10 分钟或者半小时,可以使用调度器设置持续压测时间. 设置样本总数 压测方式有2种,一种是设置线程组和循环次数,这样可以设置一个样本总数 ...

  4. requests接口自动化-动态关联text/html格式

    动态关联,前一个接口返回的值为后一个接口请求的参数. # 动态关联 import requests def test_cookies(): # 以百度为例 r_baidu=requests.get(' ...

  5. aws中centos登陆连接设置

    第一步:使用aws密钥文件(.pem)登陆(*在shell中需使用新建的会话,不能直接,使用原来的会话进行修改,否则无法进入) 点击浏览器,点添加,再点击导入,选择.pem 文件 第二步: 登陆后,使 ...

  6. P6775-[NOI2020]制作菜品【贪心,dp】

    正题 题目链接:https://www.luogu.com.cn/problem/P6775 题目大意 \(n\)种原材料,第\(i\)个有\(d_i\)个,\(m\)道菜品都需要\(k\)个原料而且 ...

  7. NOI.AC#2007-light【根号分治】

    正题 题目链接:http://noi.ac/problem/2007 题目大意 \(n\)个格子排成一排,每个格子有一个\(0/1\)和一个颜色.开始每个格子都是\(0\),\(q\)次操作取反一个颜 ...

  8. DCI架构是如何解决DDD战术建模缺点的?

    摘要:将DCI架构总结成一句话就是:领域对象(Object)在不同的场景(Context)中扮演(Cast)不同的角色(Role),角色之间通过交互(Interactive)来完成具体的业务逻辑. 本 ...

  9. MySQL初步学习——2021.09.27每日总结,第四周周一

    (1)今天做了什么: (2)明天准备做什么? (3)遇到的问题,如何解决? 今天学习了SQL语句的分类: SQL语句很多,分为 1.DQL:数据查询语言(凡是带有select关键字的都是查询语句) 2 ...

  10. 创建第一个Android项目

    目录 创建第一个Android项目 创建HelloWorld项目 选择模板 选择模板界面的英文翻译 配置项目 配置项目界面英文翻译及解释 配置项目界面的注意事项 Name的命名规范 Package n ...