生产环境部署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程序进行了修改导致的,导致没有尝试排查问题,所以,以后遇到问题,不要轻易怀疑很成熟的基础组件。
生产环境部署springcloud微服务启动慢的问题排查的更多相关文章
- 十一、Docker搭建部署SpringCloud微服务项目Demo
环境介绍 技术选型:SpringCloud&SpringCloud Alibaba&Docker 微服务模块划分: 员工模块:ems-employees 部门模块:ems-depart ...
- Devops 开发运维高级篇之Jenkins+Docker+SpringCloud微服务持续集成(上)
Devops 开发运维高级篇之Jenkins+Docker+SpringCloud微服务持续集成(上) Jenkins+Docker+SpringCloud持续集成流程说明 大致流程说明: 1) 开发 ...
- Devops 开发运维高级篇之Jenkins+Docker+SpringCloud微服务持续集成——部署方案优化
Devops 开发运维高级篇之Jenkins+Docker+SpringCloud微服务持续集成--部署方案优化 之前我们做的方案部署都是只能选择一个微服务部署并只有一台生产服务器,每个微服务只有一个 ...
- 第四百零二节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署,uwsgi安装和启动,nginx的安装与启动,uwsgi与nginx的配置文件+虚拟主机配置
第四百零二节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署,uwsgi安装和启动,nginx的安装与启动,uwsgi与nginx的配置文件+虚拟主机配置 软件版本 uwsgi- ...
- SpringCloud微服务学习笔记
SpringCloud微服务学习笔记 项目地址: https://github.com/taoweidong/Micro-service-learning 单体架构(Monolithic架构) Mon ...
- Java生鲜电商平台-SpringCloud微服务架构中核心要点和实现原理
Java生鲜电商平台-SpringCloud微服务架构中核心要点和实现原理 说明:Java生鲜电商平台中,我们将进一步理解微服务架构的核心要点和实现原理,为读者的实践提供微服务的设计模式,以期让微服务 ...
- SpringCloud微服务基础学习
看了蚂蚁课堂的微服务学习,确实学习了不少关于微服务的知识,现在总结学习如下 : SpringCloud微服务基础单点系统架构传统项目架构传统项目分为三层架构,将业务逻辑层.数据库访问层.控制层放入在一 ...
- 08 . Jenkins之SpringCloud微服务+Vue+Docker持续集成
简介 大致流程 /* 1.开发人员每天把代码提交到Gitlab代码仓库 2.jenkins从gitlab中拉取项目源码,编译并打包成war包,然后构建Docker镜像,将镜像上传到Harbor私有仓库 ...
- springcloud微服务实战:Eureka+Zuul+Feign/Ribbon+Hystrix Turbine+SpringConfig+sleuth+zipkin
相信现在已经有很多小伙伴已经或者准备使用springcloud微服务了,接下来为大家搭建一个微服务框架,后期可以自己进行扩展.会提供一个小案例: 服务提供者和服务消费者 ,消费者会调用提供者的服务,新 ...
随机推荐
- spark集群的构建,python环境
个人笔记,问题较多 符号说明 [] 表示其中内容可以没有 su [root] 获取root权限 vi /etc/sudoers 1.点击I或Insert获得插入权限 2.在root ALL=(ALL) ...
- Jetpack Compose学习(4)——Image(图片)使用及Coil图片异步加载库使用
原文地址 Jetpack Compose学习(4)--Image(图片)使用及Coil图片异步加载库使用 | Stars-One的杂货小窝 本篇讲解下关于Image的使用及使用Coil开源库异步加载网 ...
- CUDA 矩阵乘法终极优化指南
作者:马骏 | 旷视 MegEngine 架构师 前言 单精度矩阵乘法(SGEMM)几乎是每一位学习 CUDA 的同学绕不开的案例,这个经典的计算密集型案例可以很好地展示 GPU 编程中常用的优化技巧 ...
- CodeForce-799C Fountains (记忆化DP)
Fountains CodeForces - 799C 某土豪想要造两座喷泉.现在有 n 个造喷泉的方案,我们已知每个方案的价格以及美观度.有两种合法的货币:金币和钻石.这两种货币之间不能以任何方式转 ...
- 洛谷P1060——开心的金明
https://www.luogu.org/problem/show?pid=1060 题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间.更让他高兴的是,妈妈 ...
- 2. Go并发编程--GMP调度
目录 1. 前言 1.1 Goroutine 调度器的 GMP 模型的设计思想 1.2 GMP 模型 1.3. 有关M和P的个数问题 1.4 P 和 M 何时会被创建 2. 调度器的设计策略 3. g ...
- 解决dede编辑器不能保存word文档样式问题
ckeditor在dede里不能保存样式,试过多种解决办法都还是没有解决.最终将编辑器换成FCK得到解决. 第一步:下载FCK编辑器 下载地址: 链接: http://pan.baidu.com/s/ ...
- Jmeter系列(11)- 自动化压力测试逻辑思路及例子
为什么需要进行自动化压力测试 手动逐步加压,需要人工改变并发数,还要等待.所有,我们完全可以制定好策略,让程序自动加压,自动等待,输出报告 实现思路 Jmeter脚本(.jmx文件)- 压测逻辑 Sh ...
- axios的简单的使用
Axios 是什么? Axios 是一个基于 promise 网络请求库,作用于node.js 和浏览器中. 它是 isomorphic 的(即同一套代码可以运行在浏览器和node.js中).在服务端 ...
- php 常用算法与函数
1.一群猴子排成一圈,按1,2,-,n依次编号.然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去-,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫 ...