Caused by: java.util.concurrent.RejectedExecutionException: Thread pool is EXHAUSTED! Thread Name:

异常引发的问题:

线程模型

  如果事件处理的逻辑能迅速完成,并且不会发起新的 IO 请求,⽐如只是在内存中记个标识,则直接在 IO 线程上处理更快,因为减少了线程池调度。
  但如果事件处理逻辑较慢,或者需要发起新的 IO 请求,⽐如需要查询数据库,则必须派发到线程池,否则 IO 线程阻塞,将导致不能接收其它请求。
  如果⽤ IO 线程处理事件,⼜在事件处理过程中发起新的 IO 请求,⽐如在连接事件中发起登录请求,会报“可能引发死锁”异常,但不会真死锁。

 

因此,需要通过不同的派发策略和不同的线程池配置的组合来应对不同的场景:

<dubbo:protocol name="dubbo" dispatcher="all" threadpool="fixed" threads="100" />

Dispatcher
  all 所有消息都派发到线程池,包括请求,响应,连接事件,断开事件,⼼跳等。
  direct 所有消息都不派发到线程池,全部在 IO 线程上直接执⾏。
  message 只有请求响应消息派发到线程池,其它连接断开事件,⼼跳等消息,直接在 IO 线程上执⾏。
  execution 只请求消息派发到线程池,不含响应,响应和其它连接断开事件,⼼跳等消息,直接在 IO 线程上执⾏。
  connection 在 IO 线程上,将连接断开事件放⼊队列,有序逐个执⾏,其它消息派发到线程池。
ThreadPool (dubbo通过配置threadpool来配置线程池的类型:)
  fixed 固定⼤⼩线程池,启动时建⽴线程,不关闭,⼀直持有。(缺省)
  cached 缓存线程池,空闲⼀分钟⾃动删除,需要时重建。
  limited 可伸缩线程池,但池中的线程数只会增⻓不会收缩。只增⻓不收缩的⽬的是为了避免收缩时突然来了⼤流量引起的性能问题。

http://www.acgist.com/article/348.html

http://www.osbaike.net/article-show-id-312932.html

http://blog.csdn.net/lsm135/article/details/77712130

原文地址:https://www.cnblogs.com/kingxiaozi/p/8338474.html