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 线程池配置参数:

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

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

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

 

Dispatcher

  • all

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

  • direct

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

  • message

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

  • execution

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

  • connection

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

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

比如:


 

你可能感兴趣的:(Java)