先确认是不是 JDK 本身执行卡顿(最高概率)

1. 检测 java 命令耗时

time /usr/java/jdk1.8.0_271/bin/java -version
  • 输出耗时超过 1 秒:确定是 /dev/random 熵池不足问题(国产统信 ARM/x86 通用通病)
  • 瞬间输出:问题出在 Spring 项目加载流程

real 0m0.057s
user 0m0.049s
sys 0m0.013s

可以排除 jdk的问题

根因找到了:本机主机名反向解析阻塞,41 秒卡死

日志关键:
InetAddress.getLocalHost().getHostName() took 41224 milliseconds to respond
SpringBoot 启动时会获取本机 hostname,Linux / 统信系统 /etc/hosts 配置不正确,DNS 解析阻塞 40 多秒,这就是启动极慢的元凶。

一、快速验证问题

执行这条命令,看是否同样卡顿 40 秒左右:

time hostname
time java -cp /usr/java/jdk1.8.0_271/jre/lib/rt.jar java.net.InetAddress

或者直接测试:

time cat /etc/hosts
time getent hosts $(hostname)

getent hosts 本机主机名 会严重超时。

和获取主机名
import java.net.InetAddress;

InetAddress.getLocalHost()
InetAddress.getLocalHost()
现在是获取不到,这个和咱们操作系统有关系吗。

结论:和统信操作系统强相关,但不是系统 bug,是 Linux 通用主机名解析机制问题

一、为什么统信上 InetAddress.getLocalHost() 会卡 40 秒 / 获取失败

1. Java 底层调用流程(统信 Linux 完全遵循这套逻辑)

  1. JVM 调用系统接口拿到本机主机名(hostname 命令输出);
  2. 系统按 /etc/nsswitch.conf 规则解析这个主机名:先查 /etc/hosts,查不到就走 DNS 网络解析
  3. 你的服务器 /etc/hosts没有本机主机名和 127.0.0.1 的映射
  4. 系统去外网 / 内网 DNS 查询本机主机名,内网无 DNS 记录,阻塞等待 40 秒网络超时,才抛出 UnknownHostException 或缓慢返回。

2. 统信 UOS 的特殊场景加重问题

  1. 国产化服务器常离线 / 内网无 DNS 服务,resolv.conf 里 nameserver 失效;
  2. 服务器装机、克隆镜像后,/etc/hostname 主机名不会自动写入 /etc/hosts
  3. 飞腾 / 鲲鹏 ARM 架构统信,域名解析超时等待更明显,极易出现几十秒卡顿;
  4. 你服务器 CPU、内存、IO 全部空闲,线程卡在系统内核 DNS 等待,完全匹配日志 took 41224 milliseconds

3. 区分:不是 JDK 问题,是操作系统解析配置问题

  • 你测过 time java -version 0.05 秒,JDK 本身无性能缺陷;
  • 换 Windows、配置好 hosts 的 Linux,同一段代码瞬间返回;
  • 核心故障点:统信系统 /etc/hosts 缺少本机 hostname 映射

二、快速验证操作系统解析故障(统信直接执行)

# 1. 获取本机主机名
hostname
# 2. 直接让系统解析主机名,复现卡顿
time getent hosts $(hostname)

如果这条命令耗时几十秒,实锤系统解析配置错误。

三、三层解决方案(从根治到代码规避)

操作系统层面根治(推荐,永久解决所有 Java / 程序卡顿)

  1. 查看主机名,假设输出 uos-server
  2. 编辑 hosts
sudo vim /etc/hosts

修改第一行,追加你的主机名:

127.0.0.1   localhost localhost.localdomain uos-server
::1         localhost localhost.localdomain
  1. 验证修复,瞬间返回即成功
time getent hosts $(hostname)

修改后所有 Java 程序、SpringCloud 注册、工具类 getHostIp() 都不再卡顿。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐