DNS解析导致java api获取本机IP超时

简介: 背景 因为业务需求导致服务迁移,迁移过程中发现新机房同样接口的系统响应时间变的异常缓慢(普通有100-200ms的时延)。整个迁移过程中代码发布包完全拷贝,所以当时就定位为系统原因进行排查。 整个排查过程通过在代码中关键路径切入耗时监控,从而定位具体耗时部分的代码,缩小排查范围。

背景

 因为业务需求导致服务迁移,迁移过程中发现新机房同样接口的系统响应时间变的异常缓慢(普通有100-200ms的时延)。整个迁移过程中代码发布包完全拷贝,所以当时就定位为系统原因进行排查。

 整个排查过程通过在代码中关键路径切入耗时监控,从而定位具体耗时部分的代码,缩小排查范围。


排查过程

定位的代码逻辑因为保密原因省略了很多跟问题无关的代码,仅列出核心的代码。

  • try/catch过程中的核心代码没有任何耗时的逻辑。
  • finally的处理过程中增加了getLocalIP()方法获取本地ip地址。
  • 经过添加日志监控耗时怀疑getLocalIP()方法比较耗时。
    public RecomResult recommend(RequestId reqId, RecomParam condition) {
        lock.readLock().lock();
        long timeStart = System.currentTimeMillis(); 

        try {
            // 省略核心代码
            return result;
        } catch (Throwable t) {
           // 省略核心代码
        } finally {
            mapTag.put("ip", engineContext.getLocalIP());
            lock.readLock().unlock();  
        }
    }



getLocalIP()方法的实现逻辑就是调用java api获取本机ip地址

  • 网上查询类似文章InetAddress.getLocalHost() 执行很慢开始怀疑DNS解析问题。
  • 通过for循环执行dig命令确认dns解析时好时坏耗时在100-200ms不等。
  • 验证猜测确认是DNS解析问题,并开始通过本地hosts或缓存本地ip地址减少解析。。
    public String getLocalIP() {

        try {
            if (null == localIp) {
                localIp = InetAddress.getLocalHost().getHostAddress();
            }
        } catch (UnknownHostException e1) {
            LOG.error("get ip failed, e is {}", e1);
        }
        return localIp;
    }


解决方案

解决方案本身分为代码本身优化和DNS解析优化。

  • DNS层优化主要是服务器DNS解析增加本地缓存,牺牲DNS解析的时效性。
  • 代码层面优化主要获取本地ip地址后缓存只需要进行一次host解析即可。
目录
相关文章
|
1天前
|
Java 程序员 API
Java 8新特性之Lambda表达式与Stream API的深度解析
【5月更文挑战第12天】本文将深入探讨Java 8中的两个重要新特性:Lambda表达式和Stream API。我们将从基本概念入手,逐步深入到实际应用场景,帮助读者更好地理解和掌握这两个新特性,提高Java编程效率。
12 2
|
3天前
|
Java API
【JAVA进阶篇教学】第三篇:JDK8中Stream API使用
【JAVA进阶篇教学】第三篇:JDK8中Stream API使用
|
3天前
|
XML JavaScript Java
详解Java解析XML的四种方法
详解Java解析XML的四种方法
|
4天前
|
Java
解析java中的数组
解析java中的数组
10 3
|
4天前
|
网络协议 Dubbo Java
【网络编程】理解客户端和服务器并使用Java提供的api实现回显服务器
【网络编程】理解客户端和服务器并使用Java提供的api实现回显服务器
9 0
|
4天前
|
SQL Java 数据库连接
JDBC Java标准库提供的一些api(类+方法) 统一各种数据库提供的api
JDBC Java标准库提供的一些api(类+方法) 统一各种数据库提供的api
9 0
|
5天前
|
存储 Java 程序员
Java面向对象编程的基础概念解析
Java面向对象编程的基础概念解析
13 0
|
6天前
|
前端开发 JavaScript Java
java测试链接超时返回前端
java测试链接超时返回前端
16 0
|
6天前
|
供应链 搜索推荐 API
API在电子商务中的应用与优势:深入解析
API是电子商务成功的关键,它们不仅促进了技术创新,还提高了用户体验和运营效率。随着技术的不断进步,API将继续在电子商务领域发挥更加重要的作用。电子商务平台通过利用API,可以更加灵活地适应市场变化,提供更加丰富和个性化的购物体验,最终实现业务的增长和扩展。
|
6天前
|
分布式计算 Java API
Java8 Lambda实现源码解析
Java8的lambda应该大家都比较熟悉了,本文主要从源码层面探讨一下lambda的设计和实现。
1422 4

相关产品

  • 云解析DNS
  • 推荐镜像

    更多