可能原因:(1) dubbo中有httpClient调用。

由于http工具默认仅支持 5 个并发,且有线程池队列,当请求量超过 5 个的时候,多余的请求会在队列中堆积。前一批http请求结束之后其他的请求才会继续执行,越到后面线程等待时间会越长。所以对应实际业务场景中dubbo线程等待的时间也会越长,当这个队列到一定数量之后,就会引起dubbo默认200个线程池被占满的情况,从而引起整个应用服务的报错。
(2) 业务代码中,有异步调用,但异步调用又使用了线程池,异步调用后又需要等待返回结果,导致dubbo调用的时间变长,很容易把dubbo线程池用光,间接导致dubbo线程占满。

(3) dubbo接口中,处理大对象,导致频繁FGC, 请求不断,但STW时间过长,也会导致dubbo线程池占满。

总结:使用dubbo框架,请求的执行时间一定要短,特别是高并发下,很容易达到dubbo默认的线程池大小(默认200)。即便调高默认值, 但也很容易导致线程太多,CPU忙碌步过来,

            又间接导致执行时间变长的问题。 

参考:

https://blog.csdn.net/wsmalltiger/article/details/124236055

posted on 2022-09-05 10:54  毛会懂  阅读(1510)  评论(0编辑  收藏  举报