开发者社区 > 云原生 > 微服务 > 正文

有没有人帮忙解决,active threads = 0,nacos 2.2.3报错问题?

java.util.concurrent.RejectedExecutionException: Task io.grpc.internal.SerializingExecutor@12819f3d rejected from java.util.concurrent.ThreadPoolExecutor@76ae056f[Running, pool size = 512, active threads = 0, queued tasks = 16384, completed tasks = 19646742] at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2063)
不知道什么原因,active threads = 0,怎么避免这个问题,nacos运行一段时间就挂,这512进程 ,都是nacos-grpc-executor

展开
收起
你鞋带开了~ 2024-02-06 15:13:06 140 0
2 条回答
写回答
取消 提交回答
  • 这个错误提示是由于Java线程池拒绝执行任务导致的,具体来说,ThreadPoolExecutor的线程池已满(pool size = 512),并且任务队列也已满(queued tasks = 16384),但没有活跃线程(active threads = 0)来处理新的任务,因此根据拒绝策略(AbortPolicy)抛出了RejectedExecutionException异常。

    对于Nacos 2.2.3中的grpc-executor线程池配置过大且活跃线程为0的情况,可能的原因包括:

    1. 线程池中的线程都在等待IO操作,如网络请求,导致虽然线程都存在,但活跃线程数为0。
    2. 执行的任务耗时过长,导致线程长时间无法释放。
    3. grpc-executor线程池的配置不合理,比如核心线程数、最大线程数和队列大小等设置不恰当。

    解决办法可以尝试以下几点:

    • 检查并优化Nacos服务及与其通信的相关服务,减少任务执行的时间,提高系统响应效率。
    • 调整线程池参数,增大任务队列大小(但不宜过大,防止内存溢出)或适当增加最大线程数,但需要注意的是,盲目增大线程数可能会带来更多的系统开销和上下文切换,反而降低系统性能。
    • 监控并分析系统负载情况,找出可能导致线程阻塞的原因,如是否存在死锁或者其他并发控制不当的问题。
    2024-02-06 16:45:01
    赞同 展开评论 打赏
  • 线程池队列打满了,找到这个线程在哪创建的 哪一步塞进线程池的,慢慢排查
    --此回答整理自钉群“Nacos社区群4”

    2024-02-06 15:48:19
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:

为微服务建设降本增效,为微服务落地保驾护航。

相关电子书

更多
Nacos架构&原理 立即下载
workshop专场-微服务专场-开发者动手实践营-微服务-使用Nacos进行服务的动态发现和流量调度 立即下载
Nacos 启航,发布第一个版本, 云原生时代助力用户微服务平台建设 立即下载