0-1 - 线程池资源枯竭
服务端的线程资源耗尽了。 默认情况下,Dubbo 服务端的业务线程数是 200 个。如果多个并发请求量超过了 200,就会拒绝新的请求,抛出此错误。
可能的原因
- Consumer 的并发请求量太大,导致 Provider 端创建的线程数量超限。
- 可能 Provider 端在执行业务的时候,由于业务调用外部应用接口,导致线程出现阻塞,从而导致线程池回收不了线程。
排查和解决步骤
- 开启 Dubbo 的访问日志功能,排查是否有短时间内大量调用 RPC 服务的情况。
- 通过
jps
和jstack
指令检查线程池中各个线程的状态,看下是否有业务调用外部应用接口造成阻塞。 - 如果是 Consumer 的并发请求量太大,那么调整 Provider 端的
dubbo.provider.threads
参数,将 Dubbo 的线程池的数目调大。 - 如果 Provider 业务的 QPS 实在太大,目前的服务器数目处理不完,那么增加 Provider 端服务器的数量,让更多的服务器分担压力。
这个错误码的 FAQ 页面参考了空冥同学的 《Dubbo 常见错误及解决方法》 。 所引文章通过 CC-BY-4.0 协议赋予了汇编的权利。在此向原作者表示感谢。
最后修改 December 16, 2022: Fix check (#1736) (97972c1)