问题环境

  • 系统环境

    • CentOS release 6.9 (Final)
    • 2.6.32-696.16.1.el6.x86_64
  • Java 环境
    • 1.8.0_151
  • Apollo
    • 1.4.0
  • 代码框架
    • Spring Boot

问题内容

当我们启动 服务后,服务一直卡在去 Apollo 拉取配置的位置,也就是一直没有拉到配置。

2019-11-20 21:06:47.884 [main] INFO  c.c.f.f.i.p.DefaultApplicationProvider - App ID is set to xdm-test by app.id property from /META-INF/app.properties
2019-11-20 21:06:47.886 [main] INFO c.c.f.f.i.p.DefaultServerProvider - Loading /opt/settings/server.properties
2019-11-20 21:06:47.886 [main] INFO c.c.f.f.i.p.DefaultServerProvider - Environment is set to [PRO] by property 'env' in server.properties.

一直卡在这个位置。

排查方向:

  • Apollo 有问题

    • 手动去模拟请求,是可以拉取到配置的。(Apollo日志有报错)
  • 程序有问题
    • 代码发到 VPC 环境是没有问题的(当时有两套环境),拿上一个版本的代码进行启动也是不行的。
  • Spring Boot 的内置 Tomcat 启动慢(也就是没有启动起来)
    • 更改启动参数使用 /dev/urandom,无效果。
  • 网络问题
    • 手动去模拟请求,是可以拉取到配置的。
  • 其他排查
    • 使用 tcpdump 抓包,没有发现该应用向 Apollo发起拉取配置请求。

问题原因

我们查看在 /etc/hosts 中发现了最近加了一行 host 配置,是域名指向 Nginx 的,域名有 45个,也就是一行内 一个 IP 对应了 45个域名。形如:

192.168.108.108 a1.com a2.com a3.com a4.com a5.com a6.com a7.com a8.com a9.com a10.com a11.com a12.com a13.com a14.com a15.com a16.com a17.com a18.com a19.com a20.com a21.com a22.com a23.com a24.com a25.com a26.com a27.com a28.com a29.com a30.com a31.com a32.com a33.com a34.com a35.com a36.com

问题是 一行 hosts 内容太多了。导致整个 /etc/hosts配置文件没有生效,或者说是紊乱了。

问题解决办法

将上面的一行 hosts 内容放到两行里面。形如:

192.168.108.108 a1.com a2.com a3.com a4.com a5.com a6.com a7.com a8.com a9.com a10.com a11.com a12.com a13.com a14.com a15.com a16.com a17.com a18.com
192.168.108.108 a19.com a20.com a21.com a22.com a23.com a24.com a25.com a26.com a27.com a28.com a29.com a30.com a31.com a32.com a33.com a34.com a35.com a36.com

然后重启服务。就可以拉取配置了。

思考

其实在之前就有提示这个相关的报错(部分服务会报),就是在启动的时候。报错部分内容如下。



这个问题的原因是 spring-redis 在初始化时会实例化LocalHost,没有在/etc/hosts中找到对应的 主机名和 内网IP相对应的配置,但是我们进行查看的时候,发现这个配置是有的,也就是有 内网IP 和 主机名的对应记录,但是为什么不生效(也不是不生效,是在程序加载的时候不生效,我们手动ping 主机名是解析成功了的),原因就是我们配置了一行超长的 IP 和域名解析记录,当我们把这个长的解析记录分成两行后,这个报错也就不存在了。

扩展

由于上面的系统是 Centos6.9 ,我在想是不是那个版本,或者说是 6版本的BUG,我将这个情况在 CentOS Linux release 7.6.1810 (Core) 内核版本为 3.10.0-957.5.1.el7.x86_64 进行重现,我让 /etc/hosts 的一行也有45个域名,我进行启动程序,发现程序是正常的,可以正常拉取配置的。我又增加了 30个域名,共75个域名在同一行,然后进行重启程序,程序是正常的,可以正常拉取配置的,应该是在 7版本解决了这个问题。

我后面又检测了下 CentOS release 6.10 (Final) 2.6.32-754.11.1.el6.x86_64 发现也还是出现这种问题,在配置了几十个域名在一行后,启动就还会出现这种情况。

记一次hosts配置内容过多引起的故障的更多相关文章

  1. 微服务配置内容《网上copy》=========》如何创建一个高可用的服务注册中心

    前言:首先要知道什么是一个高可用的服务注册中心,基于spring boot建成的服务注册中心是一个单节点的服务注册中心,这样一旦发生了故障,那么整个服务就会瘫痪,所以我们需要一个高可用的服务注册中心, ...

  2. Fiddler的hosts配置使用

    前提:使用fiddler的hosts配置,可以方便的配置自己想要测试环境,不需要每次配置hosts都到windows目录下去修改hosts文件 1.点击Tool->HOSTS,打开hosts的配 ...

  3. 修改tnsnames.ora文件中配置内容中的连接别名后,连接超时解决办法

    1.tnsnames.ora文件中配置内容中的连接别名:由upaydb修改为IP地址 2.连接超时 定位原因: PLSQL登录界面的数据库列表就是读的tnsname.ora中连接的别名,这个文件中连接 ...

  4. CSS---解决内容过多就会出文本溢出(显示在区域外面,不换行的情况)

    当我们设置我的的div,或者其它文本框固定宽度之后,文本内容过多就会出文本溢出(显示在区域外面,不换行的情况). 这时我们可以使用Css中的几个属于来解.有以下的三个属于可以解决问题: 1,word- ...

  5. spring 部分配置内容备忘

    1.spring定时器简单配置: <bean name="taskJob" class="com.netcloud.mail.util.TaskJob"& ...

  6. Mac下显示隐藏文件 以及修改 hosts文件内容

    修改hosts 文件内容: 进入etc 文件夹,找到hosts 文件,把该文件复制出来,修改完里面的内容后,先把etc中的hosts 文件删除,然后在把修改后的文件脱机去 可能需要管理员的密码,你输入 ...

  7. .NetCore获取json文件配置内容

    .netcore中的数据配置及内容用了json文件代替了之前framework的xml文件,那么json中的数据该怎么获取呢?下面讲解json文件在.net core中的获取方法. 首先,新建一个.n ...

  8. css省...和div 内容过多,自动换行

    1.shengluohao 就是这个... 加: overflow: hidden;/*超出部分隐藏*/ white-space: nowrap;/*不换行*/ text-overflow:ellip ...

  9. hosts 配置

    hosts 配置 在windows上比较好的方法就是在本地配制hosts,在windows/system32/drivers/etc/hosts 下,增加 127.0.0.1 m.t.XXXX.com ...

随机推荐

  1. C++ std::vector emplace_back 优于 push_back 的理由

    #include <iostream> #include <vector> #include <chrono> #include <windows.h> ...

  2. 解决“var/log/sysstat/sa21: 没有那个文件或目录 请检查是否允许数据收集”

    想使用sar查看一些系统的一些活动信息,发现报错.记录一下 使用apt install sysstat后第一次 报错 /var/log/sysstat/sa21: 没有那个文件或目录 请检查是否允许数 ...

  3. SpringCloud的入门学习之概念理解、Hystrix断路器

    1.分布式系统面临的问题,复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免地失败. 2.什么是服务雪崩? 答:多个微服务之间调用的时候,假设微服务A调用微服务B和微服务 ...

  4. Actor模型(分布式编程)

    Actor的目的是为了解决分布式编程中的一系列问题.所有消息都是异步交付的,因此将消息发送方与接收方分开,正是由于这种分离,导致actor系统具有内在的并发性:可以不受限制地并行执行任何拥有输入消息的 ...

  5. Cesium专栏-裁剪效果(基于3dtiles模型,附源码下载)

    Cesium Cesium 是一款面向三维地球和地图的,世界级的JavaScript开源产品.它提供了基于JavaScript语言的开发包,方便用户快速搭建一款零插件的虚拟地球Web应用,并在性能,精 ...

  6. Redis分布式锁的实现原理

    原文链接:https://mp.weixin.qq.com/s/y_Uw3P2Ll7wvk_j5Fdlusw

  7. 高通电池管理基于qpnp-vm-bms电压模式

    CV:Constant Voltage恒压 SMMB charger:Switch-ModeBattery Charger and Boost peripheral开关模式电池充电器和升压外围设备 O ...

  8. raid组合优缺点介绍和创建LVM实验个人笔记

    一.RAID组合介绍 RAID模式优缺点的简要介绍 1.raid 0 模式 优点:在RAID 0状态下,存储数据被分割成两部分,分别存储在两块硬盘上,此时移动硬盘的理论存储速度是单块硬盘的2倍,实际容 ...

  9. [Go] 在golang中使用正则表达式捕获子表达式

    正则匹配并且可以捕获到()这个里面的子表达式的值,linux的grep命令没办法捕获子表达式的值,只能获取到整条正则匹配的内容 package main import "regexp&quo ...

  10. Octave中的矩阵常用操作2

    sum(a):矩阵里的数据求和prod(a):乘积floor(a):向上取整ceil(a):向下取整max(A,[],1):取每一列的最大值max(A,[],2):取每一行的最大值max(max(A) ...