linux中java的springboot程序获取IP地址间歇性10秒卡顿问题

【现象】

业务侧:系统用户登录接口,服务器里日志显示获取IP地址代码固定卡顿10秒。

技术侧:部署在linux的java springboot程序,获取IP地址时,偶尔出现接口卡顿约10秒,测试环境正常,仅生产服务器复现

【原因】

代码

复制代码
import java.net.InetAddress;

//问题代码行
InetAddress inet =  = InetAddress.getLocalHost();

这个方法在 Linux 生产环境下"会触发 DNS 反向解析,超时默认就是 10s",间歇性复现,测试机正常、生产卡,完全匹配现象。

【原理说明】

  1. InetAddress.getLocalHost():底层会去 /etc/hosts 查找本机 hostname 对应的 IP;

  2. 如果服务器 /etc/hosts 没有配置 hostname → 127.0.0.1 映射,操作系统就会发起 DNS 查询去解析主机名;

  3. DNS 服务器不可达 / 超时,阻塞等待,默认超时大约 10 秒;

  4. 间歇性:DNS 查询偶尔成功、偶尔超时,所以时而卡时而正常;

  5. 测试服务器:测试机 hosts 一般都配好了 hostname 映射,不会触发外网 DNS 查询,所以不卡顿。

触发时机:只有当拿到的 ip 是 0:0:0:0:0:0:0:1 或者 127.0.0.1 才会走进这段代码

【核心结论】

hosts 里有127.0.0.1 localhost,但是缺少【本机 hostname】映射。

InetAddress.getLocalHost() 不是查localhost,它查的是服务器主机名(hostname 命令输出的值),不是localhost字样。

【复现】

进入服务器

复制代码
# 查看容器内主机名,并记录下来
hostname
复制代码
# 测试这个阻塞API,直接模拟Java InetAddress.getLocalHost() 
time getent hosts $(hostname)

实锤了!

getent hosts i-MpHmJ6NrA-5 稳定耗时 10s,完全确认根因:

Linux glibc 域名解析在查询主机名 i-MpHmJ6NrA-5 时,DNS 链路超时,正好 10 秒阻塞。Java InetAddress.getLocalHost() 底层就是调用这套系统调用,所以间歇性卡住 10 秒。

【快速修复】

(当前这台机器)

编辑 /etc/hosts,追加行(注意i-MpHmJ6NrA-5字样要替换成你自己服务器刚敲hostname命令记录的):

复制代码
127.0.0.1   i-MpHmJ6NrA-5
::1         i-MpHmJ6NrA-5

保存后重新测试:

复制代码
time getent hosts i-MpHmJ6NrA-5

解决了,困扰一周的问题,大功告成。

【建议上线顺序】

  1. 开发:修改代码,删除`InetAddress.getLocalHost()`这段阻塞逻辑,打包发布;推荐首选,永久根治,消除逻辑错误

  2. 应急:先在生产机器 /etc/hosts 加上 hostname 映射,临时缓解当前卡顿,作为过渡手段

相关推荐
峥嵘life1 小时前
Android16 开机后立即打开相机闪退问题分析与解决总结
android·开发语言·数码相机·策略模式
云絮.1 小时前
mybatis(二)
java·数据库·mybatis
西凉的悲伤1 小时前
Guava-Retrying 重试框架详解
java·guava·重试框架·guava-retrying
niucloud-admin1 小时前
NIUCLOUD LITE AI开发文档--命名规范
开发语言·php
WL学习笔记1 小时前
模板初阶(C++)
开发语言·c++·后端·模板初阶
SunnyDays10112 小时前
使用 Java 高效管理 Excel 批注:添加、读取、修改和删除
java·开发语言·excel
ydjs678899-bot2 小时前
为什么大型monorepos变慢了Rush.js + Sparo对此做了什么
开发语言·javascript·ecmascript
const_qiu2 小时前
第 2.5 章 2.5.8:质量关 —— 安全审查、UI/UX 审查与踩坑复盘
java·人工智能·安全·ui·ux
坊钰2 小时前
【LangGraph框架入门级】12. 人机交互:interrupt 中断与 Command 恢复
开发语言·数据库·python·人机交互·ai编程·langgraph