生产环境 Bug No3

前言

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

 

报错信息

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

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

    报错信息以下:服务器

    

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

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

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

 

解决

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

相关文章
相关标签/搜索