解决Dubbo应用启动注册ZK获取IP慢的原因之一

 更新时间:2024年04月15日 10:31:32   作者:椰树海岛  
这篇文章主要介绍了解决Dubbo应用启动注册ZK获取IP慢的原因之一,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

Dubbo应用启动注册ZK获取IP慢的原因之一

突然有一天,我的idea启动应用慢了,要3分钟才能启动完毕。

主要看到的log中有

No valid ip found from environment, try to find valid host from DNS.

看了一下是主要是dubbo注册的时候慢,我一度以为公司的对我的ip有做限制了,因为其他人启动又很快。

1:第一次思路是我自己下载了zk运行起来注册到本地来看看,也是照样慢。

2:idea慢,我设置了idea的启动最大内存为2G,这之前我没设置过,后发现也无效。

3:我一度以为我的IP vpn做了转发引起的,或者电脑安装了什么软件导致慢了。最后发现也不是。

            [TID: N/A|] o.a.d.r.z.ZookeeperRegistry              :  [DUBBO] Register: dubbo://127.0.0.1:20880/com.xxx.api.server.sys.XxxFacade?application=mydemo-server&deprecated=false&dubbo=2.0.2&release=2.7.4.1&timeout=60000&timestamp=1628244643743, dubbo version: 2.7.4.1, current host: 127.0.0.1
2021-08-06 18:10:43.983  INFO [           main]
            [TID: N/A|] o.a.d.r.z.ZookeeperRegistry              :  [DUBBO] Subscribe: provider://127.0.0.1:20880/com.xxx.api.server.sys.XxxFacade?anyhost=true&application=mydemo-server&bean.name=ServiceBean:com.xxx.api.server.sys.XxxFacade&bind.ip=127.0.0.1&bind.port=20880&category=configurators&check=false&delay=0&deprecated=false&dubbo=2.0.2&dynamic=true&generic=false&interface=com.xxx.api.server.sys.XxxFacade&methods=listNewOrganizations,listTreeCmdbOrg,listTCOrg&pid=24334&qos.enable=false&release=2.7.4.1&side=provider&timeout=60000&timestamp=1628244643743, dubbo version: 2.7.4.1, current host: 127.0.0.1
2021-08-06 18:10:44.098  INFO [           main]
            [TID: N/A|] o.a.d.r.z.ZookeeperRegistry              :  [DUBBO] Notify urls for subscribe url provider://127.0.0.1:20880/com.xxx.api.server.sys.XxxFacade?anyhost=true&application=mydemo-server&bean.name=ServiceBean:com.xxx.api.server.sys.XxxFacade&bind.ip=127.0.0.1&bind.port=20880&category=configurators&check=false&delay=0&deprecated=false&dubbo=2.0.2&dynamic=true&generic=false&interface=com.xxx.api.server.sys.XxxFacade&methods=listNewOrganizations,listTreeCmdbOrg,listTCOrg&pid=24334&qos.enable=false&release=2.7.4.1&side=provider&timeout=60000&timestamp=1628244643743, urls: [override://10.216.7.243:20880/com.xxx.api.server.sys.XxxFacade?category=configurators&disabled=true&dynamic=false&enabled=true], dubbo version: 2.7.4.1, current host: 127.0.0.1
2021-08-06 18:10:44.099  INFO [           main]
            [TID: N/A|] o.a.d.c.AbstractConfig                   :  [DUBBO] The service ready on spring started. service: com.xxx.api.facade.DailyFacade, dubbo version: 2.7.4.1, current host: 127.0.0.1
2021-08-06 18:10:44.099  INFO [Report-thread-1]
            [TID: N/A|] o.a.d.m.s.z.ZookeeperMetadataReport      :  [DUBBO] store provider metadata. Identifier : org.apache.dubbo.metadata.identifier.MetadataIdentifier@3e661e1b; definition: FullServiceDefinition{parameters={side=provider, release=2.7.4.1, methods=listNewOrganizations,listTreeCmdbOrg,listTCOrg, deprecated=false, dubbo=2.0.2, interface=com.xxx.api.server.sys.XxxFacade, qos.enable=false, timeout=60000, generic=false, delay=0, application=mydemo-server, dynamic=true, bean.name=ServiceBean:com.xxx.api.server.sys.XxxFacade, anyhost=true}} ServiceDefinition [canonicalName=com.xxx.api.server.sys.XxxFacade, codeSource=file:/Users/cookie.joo/IdeaProjects/mydemo/mydemo-api/target/classes/, methods=[MethodDefinition [name=listNewOrganizations, parameterTypes=[], returnType=com.xxx.common.entity.RpcResult], MethodDefinition [name=listTreeCmdbOrg, parameterTypes=[], returnType=com.xxx.common.entity.RpcResult], MethodDefinition [name=listTCOrg, parameterTypes=[], returnType=com.xxx.common.entity.RpcResult]]], dubbo version: 2.7.4.1, current host: 127.0.0.1
2021-08-06 18:10:44.108  INFO [           main]
            [TID: N/A|] o.a.d.c.AbstractConfig                   :  [DUBBO] No valid ip found from environment, try to find valid host from DNS., dubbo version: 2.7.4.1, current host: 127.0.0.1
2021-08-06 18:10:44.169  INFO [           main]
            [TID: N/A|] o.a.d.c.AbstractConfig                   :  [DUBBO] Export dubbo service com.xxx.api.facade.DailyFacade to local registry url : injvm://127.0.0.1/com.xxx.api.facade.DailyFacade?anyhost=true&application=mydemo-server&bean.name=ServiceBean:com.xxx.api.facade.DailyFacade&bind.ip=127.0.0.1&bind.port=20880&delay=0&deprecated=false&dubbo=2.0.2&dynamic=true&generic=false&interface=com.xxx.api.facade.DailyFacade&methods=jiraRequestCheck,checkRdRequest,jiraSearch,remind&pid=24334&qos.enable=false&release=2.7.4.1&side=provider&timeout=60000&timestamp=1628244644105, dubbo version: 2.7.4.1, current host: 127.0.0.1
2021-08-06 18:10:44.169  INFO [           main]
            [TID: N/A|] o.a.d.c.AbstractConfig                   :  [DUBBO] There's no valid monitor config found, if you want to open monitor statistics for Dubbo, please make sure your monitor is configured properly., dubbo version: 2.7.4.1, current host: 127.0.0.1
2021-08-06 18:10:44.169  INFO [           main]

我继续看日志中的类

主要是很多次 [DUBBO] Register: 出现这一句的时候会卡一下

继续出现下一个接口注册又卡一下,我大概已经猜测就是ip寻址的问题了

最后我从代码中看到了org.apache.dubbo.common.utils.NetUtils#getLocalHost这个方法

断点后确实是这个方法有点卡顿,差不多几秒才有反应的。

我搜了一些文章确实是反应了这个getHostAddress的问题,要设置hostname和127.0.0.1的映射关系

我就设置了hosts,然后启动确实好了,恢复到几十秒内启动完毕。(hostname是机器名)

其中的问题是getHostAddress是使用native本地方法来获取的,如果没有配置好映射会出现调用方法卡顿的问题。

class Inet4AddressImpl implements InetAddressImpl {
    public native String getLocalHostName() throws UnknownHostException;

如果启动项目要这么久,开发代码到测试阶段一定会很痛苦,这个问题不解决,以后工作效率肯定会奔溃。

注意:

注册接口到zk时打印日志会有个空隙,并不是平滑的日志打印那种感觉,这就是问题的现象。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java8中Optional类型和Kotlin中可空类型的使用对比

    Java8中Optional类型和Kotlin中可空类型的使用对比

    这篇文章主要给大家介绍了关于Java8中Optional类型和Kotlin中可空类型的使用对比,文中通过示例代码给大家介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-09-09
  • SpringBoot 对象存储 MinIO的详细过程

    SpringBoot 对象存储 MinIO的详细过程

    MinIO 是一个基于 Go 实现的高性能、兼容 S3 协议的对象存储,它适合存储海量的非结构化的数据,这篇文章主要介绍了SpringBoot 对象存储 MinIO,需要的朋友可以参考下
    2023-07-07
  • 使用jenkins部署springboot项目的方法步骤

    使用jenkins部署springboot项目的方法步骤

    这篇文章主要介绍了使用jenkins部署springboot项目的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Springboot actuator生产就绪功能实现解析

    Springboot actuator生产就绪功能实现解析

    这篇文章主要介绍了Springboot actuator生产就绪功能实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • Java获取路径的6种方式代码示例

    Java获取路径的6种方式代码示例

    在Java中获取路径的方法有多种,每种方法适用于不同的场景,这篇文章主要介绍了Java获取路径的6种方式,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-02-02
  • Java线程阻塞的方法区别详解

    Java线程阻塞的方法区别详解

    这篇文章主要介绍了Java线程阻塞的方法区别详解,线程阻塞是指当一个线程无法继续执行时,它会进入阻塞状态,直到某个条件满足后才能继续执行,线程阻塞可以通过多种方式实现,如等待锁、等待IO操作、等待其他线程的完成等,需要的朋友可以参考下
    2023-10-10
  • Java实现弹窗效果的基本操作(2)

    Java实现弹窗效果的基本操作(2)

    这篇文章主要为大家详细介绍了Java实现弹窗效果的基本操作第二篇,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • Spring编程式和声明式事务实例讲解小结

    Spring编程式和声明式事务实例讲解小结

    这篇文章主要介绍了Spring编程式和声明式事务实例讲解小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • springboot项目实现多数据源配置使用dynamic-datasource-spring-boot-starter的操作步骤

    springboot项目实现多数据源配置使用dynamic-datasource-spring-boot-starter

    这篇文章主要介绍了springboot项目实现多数据源配置使用dynamic-datasource-spring-boot-starter,本文分步骤结合实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2023-06-06
  • 详解java迭代器模式

    详解java迭代器模式

    这篇文章主要介绍了java迭代器模式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05

最新评论