1、问题描述
前几年我在做微服务部件升级时,将Dubbo的注册中心从Zookeeper切换到Nacos。切换的原因是有2点:
- Zookeeper保障了CP,面对大量服务上下线时,吞吐量和响应有瓶颈。Nacos保障了AP,目前微服务的场景下,业界建议优先保障AP,这样有较好的吞吐量和较快的响应。
- 本着能少用部件就少用,尽量减少故障点的原则。Nacos既可以做注册中心也可以做配置中心,所以二合一,只采用一个部件。
切换完之后,奇怪的事情发生了,出现2个现象:
- 有些微服务启动很慢很慢,甚至长达15分钟的时间都无法成功启动,一直在打印大量的nacos请求日志。但是有些微服务启动又较快。
- 通过VisualVM查看JVM的线程情况,发现有的微服务居然高达4000左右的线程数。但是没切换之前只有几百的线程数。启动了大量的线程,导致CPU飙升不少,同时服务启动也慢。
2、通过现象开始排查
出现这种问题时,刚开始有点抓瞎,但是我们只能从常规的手段一点点排查,急不来。通过表面的现象,我们来逐步分析。
现象一:微服务启动很慢很慢,一直在打印大量的nacos请求日志。日志如下:

现象二:JVM的线程数高达4000左右。线程情况如下:


文章讲述了作者在将Dubbo的注册中心从Zookeeper切换到Nacos后遇到的问题,涉及微服务启动缓慢、大量线程和CPU占用上升。通过现象分析、源码追踪,发现是Dubbo2.7.8版本中NacosRegistryFactory的timestamp参数导致的无谓线程创建。最终,作者提供了问题的解决方法并建议深入理解底层原理以预防类似问题。

4359

被折叠的 条评论
为什么被折叠?



