0-1 - 线程池资源枯竭

服务端的线程资源耗尽了。 默认情况下,Dubbo 服务端的业务线程数是 200 个。如果多个并发请求量超过了 200,就会拒绝新的请求,抛出此错误。

可能的原因

  1. Consumer 的并发请求量太大,导致 Provider 端创建的线程数量超限。
  2. 可能 Provider 端在执行业务的时候,由于业务调用外部应用接口,导致线程出现阻塞,从而导致线程池回收不了线程。

排查和解决步骤

  • 开启 Dubbo 的访问日志功能,排查是否有短时间内大量调用 RPC 服务的情况。
  • 通过 jpsjstack 指令检查线程池中各个线程的状态,看下是否有业务调用外部应用接口造成阻塞。
  • 如果是 Consumer 的并发请求量太大,那么调整 Provider 端的 dubbo.provider.threads 参数,将 Dubbo 的线程池的数目调大。
  • 如果 Provider 业务的 QPS 实在太大,目前的服务器数目处理不完,那么增加 Provider 端服务器的数量,让更多的服务器分担压力。

这个错误码的 FAQ 页面参考了空冥同学的 《Dubbo 常见错误及解决方法》 。 所引文章通过 CC-BY-4.0 协议赋予了汇编的权利。在此向原作者表示感谢。


最后修改 October 19, 2022: Update 1.md (#1562) (d456b4b8f)