dubbo 线程池参数配置 dubbo线程池多少合适_长连接

作者:cyfonly

本文是针对 Dubbo 协议调用的调优指导,详细说明常用调优参数的作用域及源码。

Dubbo调用模型

dubbo 线程池参数配置 dubbo线程池多少合适_dubbo 线程池参数配置_02

常用性能调优参数

参数名

作用范围

默认值

说明

备注

threads

provider

200

业务处理线程池大小

iothreads

provider

CPU+1

io线程池大小

queues

provider

0

线程池队列大小,当线程池满时,排队等待执行的队列大小,

建议不要设置,当线程程池时应立即失败,

重试其它服务提供机器,而不是排队,除非有特殊需求

connections

consumer

0

对每个提供者的最大连接数,

rmi、http、hessian等短连接协议表示限制连接数,

Dubbo等长连接协表示建立的长连接个数

Dubbo协议默认共享一个长连接

actives

consumer

0

每服务消费者每服务每方法最大并发调用数

0表示不限制

acceptes

provider

0

服务提供方最大可接受连接数

0表示不限制

executes

provider

0

服务提供者每服务每方法最大可并行执行请求数

0表示不限制

源码及原理分析

>>  threads

FixedThreadPool.java

public Executor getExecutor(URL url) {

LimitedThreadPool.java

public Executor getExecutor(URL url) {

其中,Constants.DEFAULT_QUEUES = 200。threads 参数配置的是业务处理线程池的最大(或核心)线程数。

>>  iothreads

NettyServer.java

@Override

>>  queues

分别在 FixedThreadPool.java、LimitedThreadPool.java 和 CachedThreadPool.java 中使用,代码详情见 3.2章节。 由代码可见,默认值为 0,表示使用同步阻塞队列;如果 queues 设置为小于 0 的值,则使用容量为 Integer.MAX_VALUE 的阻塞链表队列;如果为其他值,则使用指定大小的阻塞链表队列。

>>  connections

DubboProtocol.java

private ExchangeClient[] getClients(URL url){

DubboInvoker.java

@Override

以上可见,默认值为0,表示针对每个 Provider,所有客户端共享一个长连接;否则,建立指定数量的长连接。在调用时,如果有多个长连接,则使用轮询方式获得一个长连接。

>>  actives

ActiveLimitFilter.java

public Result invoke(Invoker> invoker, Invocation invocation) throws RpcException {

Consumer 调用时,统计服务和方法维度的调用情况,如果并发数超过设置的最大值,则阻塞当前线程,直到前面有请求处理完成。

>>  accepts

AbstractServer.java

@Override

当连接数大于最大值时,关闭当前连接。

>>  executes

ExecuteLimitFilter.java

public Result invokeOrg(Invoker> invoker, Invocation invocation) throws RpcException {

Provider处理请求时,统计方法维度的调用情况,如果并发数超过设置的最大值,则阻直接抛出异常。