Dubbo线程池耗尽问题

场景:dubbo 线程池耗尽,报错。

Caused by: java.util.concurrent.RejectedExecutionException: Thread pool is EXHAUSTED! Thread Name: DubboServerHandler-XX.XX.XX.XX:XXXX, Pool Size: 200 (active: 200, core: 200, max: 200, largest: 200), Task: 39522284 (completed: 39422084), Executor status:(isShutdown:false, isTerminated:false, isTerminating:false), in dubbo://XX.XX.XX.XX:XXXX!

at com.alibaba.dubbo.common.threadpool.support.AbortPolicyWithReport.rejectedExecution(AbortPolicyWithReport.java:53)

at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:830)

at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1379)

at com.alibaba.dubbo.remoting.transport.dispatcher.all.AllChannelHandler.received(AllChannelHandler.java:56)

dubbo 线程池配置参数:

属性默认备注
threadpoolfixed线程池类型,可选:fixed/cached
threads200服务线程池大小(固定大小)
accepts0服务提供方最大可接受连接数
dispatcherall协议的消息派发方式,用于指定线程模型,比如:dubbo协议的all, direct, message, execution, connection等

dubbo 默认的线程池是固定大小的线程池。

  • fixed固定大小线程池,启动时建立线程,不关闭,一致持有。
  • cached 缓存线程池,空闲一分钟,线程会消费,需要时重新创建新线程。

 

Dispatcher

  • all

所有消息都派发到线程池,包括请求、响应、连接事件、断开事件、心跳等。

  • direct

所有消息都不派发到线程池,全部在IO线程上直接执行。

  • message

只有请求响应消息派发到线程池,其他连接断开事件、心跳等消息,直接在IO线程上执行。

  • execution

只请求消息派发到线程池,不含响应,响应和其他连接断开事件、心跳等消息,直接在IO线程上执行。

  • connection

在IO线程上,将连接断开事件放入队列,有序逐个执行,其他消息派发到线程池。

出现dubbo 线程池耗尽,一般推荐性能调优是。 dubbo 协议消息分派方式是message,并调大线程池大小。

比如:

<dubbo:protocol name="dubbo" dispatcher="message" threads="500" threadpool="fixed"/>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jiguansheng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值