今天晚上在排查线上问题的时候,突然发现一个认为很奇怪的地方(最终确定是我的误判).
作为Dubbo提供者,Dubbo线程的名称很奇怪.如下图
比如机器的IP是127.0.0.1,对外提供的端口是20880,那么Dubbo业务线程池中的线程名称应该叫做DubboServerHandler-127.0.0.1:20880-thread-17这样才对.可是线上这个线程的名称后面那个数字是4213,这个数字很大.
根据掌握的知识,Dubbo默认使用的线程池是固定大小的FixedThreadPool.线程数量默认200个.也就是说线程的名称最大也就是叫做DubboServerHandler-127.0.0.1:20880-thread-200.
Dubbo提供的线程池
com.alibaba.dubbo.common.threadpool.support.cached.CachedThreadPool
com.alibaba.dubbo.common.threadpool.support.eager.EagerThreadPool
com.alibaba.dubbo.common.threadpool.support.fixed.FixedThreadPool
com.alibaba.dubbo.common.threadpool.support.limited.LimitedThreadPool
但这与我线上看到的这个线程名称不一样.而且我通过jstack命令查看堆栈.发现那个时刻只有一个Dubbo线程(就是截图中的那个线程).
我还以为我看错了,对以前的知识理解错了.
其实,是项目代码中在配置的时候
线程池配置成了cached,熟悉JDK线程池的同学,看到这个cached单词,应该知道它是什么线程池吧.而且线程数600.
但是这样的配置是否合理呢?明天再与其他同学沟通下.
所有的表象都是有原因的
公众号