MSE接入阿里的Nacos,就有时CPU偏高的,这是为什么?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
MSE接入阿里的Nacos时,有时会出现CPU偏高的现象,这可能是由多种原因导致的。以下是可能的原因及对应的解决方案:
如果应用中创建了过多的Nacos-Client实例(如NacosNamingService
或NacosConfigService
),或者未正确关闭旧的Nacos-Client实例,可能会导致线程池数量膨胀,从而增加CPU负载。
检查Nacos-Client实例数量
使用以下命令统计Nacos-Client实例的数量:
jmap -histo ${pid} > histo.log
grep "NacosNamingService" histo.log | awk '{print $2,$4}'
grep "NacosConfigService" histo.log | awk '{print $2,$4}'
正常情况下,Nacos-Client实例数量应不超过3个。如果超过10个,需检查代码是否每次创建新实例而未复用。
确保正确关闭线程池
在替换旧的Nacos-Client实例时,调用shutdown
方法关闭线程池,避免线程泄漏。
调整线程池大小
如果线程池核心大小和最大大小设置不当,可以通过以下参数调整:
-Dnacos.remote.client.grpc.pool.core.size=${核心线程数}
-Dnacos.remote.client.grpc.pool.max.size=${最大线程数}
在容器化环境中,程序可能读取到错误的CPU数量,导致线程池的核心大小和最大大小被错误设置,进而引发CPU使用率过高。
Runtime.getRuntime().availableProcessors()
如果读取到的CPU数量过大,可通过以下参数强制指定正确的CPU数量(需Nacos-Client版本为2.1.1及以上):
-Dnacos.common.processors=${正确的CPU数量}
或通过环境变量设置:
export NACOS_COMMON_PROCESSORS=${正确的CPU数量}
如果客户端或服务端频繁发生Full GC,会导致CPU使用率升高,并可能引发连接超时等问题。
监控Full GC频率
在MSE控制台的JVM监控页面,查看是否频繁出现Full GC。如果频繁发生,需优化内存分配或升级实例规格。
分析GC日志
启用GC日志并分析是否存在内存泄漏或对象分配异常:
-XX:+PrintGCDetails -Xloggc:${gc_log_path}
如果客户端与MSE Nacos之间的网络不稳定,可能导致请求重试频繁,增加CPU负载。
排查网络问题
使用以下命令检查网络连通性:
ping ${mse.nacos.host}
telnet ${mse.nacos.host} 8848
curl ${mse.nacos.host}:8848/nacos/v1/ns/service/list
如果网络存在问题,需解决网络故障或调整VPN设置。
优化超时时间
根据客户端版本设置合理的超时时间。例如,对于Java Client 2.1.2及以上版本,可设置以下参数:
-Dnacos.remote.client.grpc.timeout=${请求超时,单位毫秒,默认3000}
-Dnacos.remote.client.grpc.server.check.timeout=${服务端健康检测,单位毫秒,默认3000}
-Dnacos.remote.client.grpc.health.timeout=${连接健康检测,单位毫秒,默认3000}
如果MSE Nacos服务端的CPU使用率过高,可能会影响客户端的性能,导致客户端CPU负载升高。
监控服务端资源使用情况
在MSE控制台的资源监控页面,查看服务端的CPU使用率、内存使用率和入口/出口流量。如果接近或超过100%,需升级实例规格。
优化数据推送逻辑
MSE Nacos专业版已优化数据推送逻辑,减少单个连接推送失败对其他连接的影响。建议升级至最新版本的专业版。
部分Nacos 2.x客户端可能存在频繁调用Login接口的问题,导致集群CPU飙升。
如果短时间内业务请求量突增,可能导致客户端和服务端的CPU负载同时升高。
监控请求量
在MSE控制台的概览页面,查看每秒查询数(QPS)和每秒操作数(TPS)。如果超出实例的处理能力,需扩容或升配。
限流与降级
配置限流规则,避免突发流量对系统造成冲击。
MSE接入Nacos时CPU偏高的问题,通常由客户端线程池配置不当、系统环境问题、频繁Full GC、网络问题、服务端负载过高或业务请求量突增等原因引起。通过上述步骤逐一排查并优化,可以有效降低CPU使用率,提升系统稳定性。