dubbo参数调优

dubbo中配置优先级规律:方法级配置优先级高于接口级,consumer的优先级高于provider。

详细:

consumer的method配置  >  provider的method配置

consumer的reference配置  >  provider的service配置

consumer的consumer节点配置  >  provider的provider节点配置

 

本地参数配置优化级:

系统参数(-D),如-Ddubbo.protocol.port  >  xml配置  >  property文件

参数名作用范围默认值说明备注
activesconsumer0每服务消费者每服务每方法最大并发调用数0表示不限制
connectionsconsumer 对每个提供者的最大连接数,rmi、http、hessian等短连接协议表示限制连接数,dubbo等长连接协表示建立的长连接个数dubbo时为1,及复用单链接
acceptsprovider0服务提供方最大可接受连接数0表示不限制
iothreadsprovidercpu个数+1io线程池大小(固定大小) 
threadsprovider200业务线程池大小(固定大小) 
executesprovider0服务提供者每服务每方法最大可并行执行请求数0表示不限制
tpsprovider 指定时间内(默认60s)最大的可执行次数,注意与executes的区别默认不开启

  

 1、当consumer发起一个请求时,首先经过active limit(参数actives)进行方法级别的限制,其实现方式为CHM中存放计数器(AtomicInteger),请求时加1,请求完成(包括异常)减1,如果超过actives则等待有其他请求完成后重试或者超时后失败;

 2、从多个连接(connections)中选择一个连接发送数据,对于默认的netty实现来说,由于可以复用连接,默认一个连接就可以。不过如果你在压测,且只有一个consumer,一个provider,此时适当的加大connections确实能够增强网络传输能力。但线上业务由于有多个consumer多个provider,因此不建议增加connections参数;

 3、连接到达provider时(如dubbo的初次连接),首先会判断总连接数是否超限(acceps),超过限制连接将被拒绝;

 4、连接成功后,具体的请求交给io thread处理。io threads虽然是处理数据的读写,但io部分为异步,更多的消耗的是cpu,因此iothreads默认cpu个数+1是比较合理的设置,不建议调整此参数;

 5、数据读取并反序列化以后,交给业务线程池处理,默认情况下线程池为fixed,且排队队列为0(queues),这种情况下,最大并发等于业务线程池大小(threads),如果希望有请求的堆积能力,可以调整queues参数。如果希望快速失败由其他节点处理(官方推荐方式),则不修改queues,只调整threads;

 6、execute limit(参数executes)是方法级别的并发限制,原理与actives类似,只是少了等待的过程,即受限后立即失败;

 7、tps,控制指定时间内(默认60s)的请求数。注意目前dubbo默认没有支持该参数,需要加一个META-INF/dubbo/com.alibaba.dubbo.rpc.Filter文件,文件内容为:

      tps=com.alibaba.dubbo.rpc.filter.TpsLimitFilter

 

  如果consumer数*actives>provider数*threads且queues=0,则会存在部分请求无法申请到资源,重试也有很大几率失败。

  当需要对一个接口的不同方法进行不同的并发控制时使用executes,否则调整threads就可以。

 

 【转载自:https://blog.youkuaiyun.com/youaremoon/article/details/51884644】

  dubbo文档:http://alibaba.github.io/dubbo-doc-static/Dubbo+Protocol-zh.htm  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值