生產環境 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 正常啓動。隊列

相關文章
相關標籤/搜索