侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

生产环境 Bug No3

2023-12-08 星期五 / 0 评论 / 0 点赞 / 92 阅读 / 2066 字

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

前言

    生产环境使用阿里云的消息队列服务,在 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 正常启动。

 

 

 

 

 

 

 

 

 

 

广告 广告

评论区