alibaba / nacos

an easy-to-use dynamic service discovery, configuration and service management platform for building cloud native applications.
https://nacos.io
Apache License 2.0
30.29k stars 12.84k forks source link

配置列表自动出现很多以接口为group的配置文件,并且有非常多nacos线程,正常吗? #4491

Closed Sakuramaomao closed 3 years ago

Sakuramaomao commented 3 years ago

Issue Description

Describe what happened (or what feature you want)

1、项目启动时,配置列表中自动出现很多以application.name为DataId,以mapping-接口名称为Group的配置项。 image

2、整个项目大约有160个需要暴露的接口,但产生了2000左右线程,并且绝大部分是com.alibaba.nacos.naming.beat.sender、com.alibaba.nacos.naming.client.listener、com.alibaba.nacos.naming.failover以及com.alibaba.nacos.naming.push.receiver线程,估计有1800左右。 image image image

3、项目启动后,上述绝大部分线程处于WAITING/TIMED_WAITING状态,CPU总占用率不高,10%左右(i7-8565U 4c8t)。

请问出现配置列表自动出现很多的情况、线程数量过多的情况正常吗?

Describe what you expected to happen

我觉得只是单纯的把nacos当做注册中心使用,并没有使用配置中心功能,不应该产生那么多线程吧。不知道是不是我那里配置有问题。

How to reproduce it (as minimally and precisely as possible)

===============Dubbo配置 start==================

dubbo:
  registry:
    # provider服务注册地址
    address: nacos://127.0.0.1:8849
    # 启动时检查注册中心
    check: false
  scan:
    # 扫描Services注解
    base-packages: com.datah.provider
  protocol:
    # 以dubbo协议暴露
    name: dubbo
    port: -1
  provider:
    # 重试
    retries: 0
    # 消费超时时间
    timeout: 60000
  application:
    qos-enable: false

===============Dubbo配置 end==================

===============pom配置 start==================

<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.2.5.RELEASE</version>

<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.7</version>

<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>1.2.1</version>

===============pom配置 end==================

Tell us your environment

1、基础环境使用的springboot2.2.5+dubbo2.7.7+nacos1.2.1。 2、我目前只是用nacos作为注册中心使用,没有使用配置中心的任何功能。

Anything else we need to know?

对了,我用jmap查看了对象的数量。如下图所示,com.alibaba.nacos.client.naming.NacosNamingService类在堆中有164个实例,com.alibaba.nacos.client.config.impl.ClientWorker只有一个。 此外,com.alibaba.nacos.api.naming.pojo.ServiceInfo有114582个, com.alibaba.nacos.api.naming.pojo.ServiceInfo有114568个。 image

chuntaojun commented 3 years ago

https://nacos.io/zh-cn/docs/faq.html / 客户端CPU高,或者内存耗尽的问题

Sakuramaomao commented 3 years ago

https://nacos.io/zh-cn/docs/faq.html / 客户端CPU高,或者内存耗尽的问题

内存使用也不是很高,客户端启动后,CPU占用在10%左右,也还行。主要是后台有2000个左右的线程,而且绝大部分都是nacos相关的,感觉不是什么正常现场啊。也不知道其他人有没有遇到过类似问题。

KomachiSion commented 3 years ago

那是使用方式不对,一般NacosNamingService和NacosConfigService 一个进程就一个。

KomachiSion commented 3 years ago

建议把issue转到dubbo社区,可能是dubbo使用方式不对或者是你使用dubbo的方式不对。

Sakuramaomao commented 3 years ago

那是使用方式不对,一般NacosNamingService和NacosConfigService 一个进程就一个。

谢谢提示。我也去dubbo社区问问。顺便也按照你的提示再去检查下自己的程序配置。

Sakuramaomao commented 3 years ago

https://github.com/apache/dubbo/issues/6988 应该是dubbo的bug了。

dancer-lxp commented 3 years ago

那是使用方式不对,一般NacosNamingService和NacosConfigService一个进程就一个。

谢谢提示。我也去dubbo社区问问。顺便也按照你的提示再去检查下自己的程序配置。

您好,我问下您这个问题解决了么?

Sakuramaomao commented 3 years ago

那是使用方式不对,一般NacosNamingService和NacosConfigService一个进程就一个。

谢谢提示。我也去dubbo社区问问。顺便也按照你的提示再去检查下自己的程序配置。

您好,我问下您这个问题解决了么?

哈哈,我的问题已经解决了。线程数从2000恢复到了80左右。由于没有那么多线程了,项目冷启动速度从70s缩短到了27s。

dubbo社区已经有人发现了这个bug(https://github.com/apache/dubbo/issues/6988)并且提交了pr。目前已经被合并到了master分支(dubbo 2.7.9)。我自己编译了下,将2.7.8版本里的org.apache.dubbo.registry.nacos.NacosRegistryFactory.class替换为编译后的。项目启动后线程就正常了,服务也都可以正常调用。

lomodays207 commented 3 years ago

那是使用方式不对,一般NacosNamingService和NacosConfigService一个进程就一个。

谢谢提示。我也去dubbo社区问问。顺便也按照你的提示再去检查下自己的程序配置。

您好,我问下您这个问题解决了么?

哈哈,我的问题已经解决了。线程数从2000恢复到了80左右。由于没有那么多线程了,项目冷启动速度从70s缩短到了27s。

dubbo社区已经有人发现了这个bug(https://github.com/apache/dubbo/issues/6988)并且提交了pr。目前已经被合并到了master分支(dubbo 2.7.9)。我自己编译了下,将2.7.8版本里的org.apache.dubbo.registry.nacos.NacosRegistryFactory.class替换为编译后的。项目启动后线程就正常了,服务也都可以正常调用。

您好,想请问下 我直接使用的是2.7.9 这个版本的,还是有配置文件自动注册到nacos 上去, 有解决版本嘛?