生产环境 Bug No3

坚强是说给别人听的谎言 提交于 2019-12-01 16:04:03

前言

    生产环境使用阿里云的消息队列服务,在 tomcat 容器 WAR 包中使用官方提供的 SDK,但是在启动 tomcat 的时候,报错了。

 

报错信息

    部署 tomcat 的 ECS 为双十一后购买的服务器,新的服务器在创建的时候主机名更改为 16 位字符;

    生产环境之前有一批老机器,大概是 2016 年 6月份买的,上面也部署了相同配置的 tomcat,并使用同一个 MQ 队列,但是 tomcat 启动成功,这让人很是费解,在检查了配置文件和 SDK 文档比对之后,竟然在老的机器上启动成功,很伤。

    报错信息如下:

    

其中 java.net.UnknownHostException: 的错误也让人很费解。

    网上查了好多资料,后来定位到是 hostname 获取不到的原因,ECS 服务器的hostname 是配置在 /etc/hostname 中的,hostname 命令也可以正常读取主机名,在大多数 Linux 系统中(Redhat、Centos等)都是在 /etc/hosts 中获取主机名的,Detian 是从 /etc/hostname 中得到主机名的。

    Java 的 inetAddress.java 调用方法 getLocalHostName() 获取主机名,属于系统调用,所以在 centos 上面,会读取 /etc/hosts 文件来获取主机名,但阿里云新购服务器恰恰没有在 /etc/hosts 中定义主机名,老的机器有这个定义。

 

解决

    在 /etc/hosts 文件中添加 本机IP hostname,然后 tomcat 正常启动。

 

 

 

 

 

 

 

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!