原創 2023年07月13日 22:28:50
在介紹引數之前,我們先了解下dubbo中配置的優先順序,以免出現調優引數設定了卻沒發現效果實際是配置被覆蓋導致這樣的問題。dubbo分為consumer和provider端,在配置各個引數時,其優先順序如下:
1、consumer的method配置
2、provider的method配置
3、consumer的reference配置
4、provider的service配置
5、consumer的consumer節點配置
6、provider的provider節點配置
可以看到,方法級的配置優先順序高於介面級,consumer的優先順序高於provider。同時,在本地引數配置還存在一層優先順序:
1、系統引數(-d),如-ddubbo.protocol.port=20881
2、xml配置
3、property檔案
了解了這兩個優先順序,調優起來才會更加清晰,省去了一些諸如配置設定了不生效這樣的麻煩。注意,其實dubbo中還可以通過將配置寫入註冊中心的方式覆蓋使用者配置(優先順序高於系統引數),這裡不展開,有興趣的同學可以去看官方文件。接下來我們看看dubbo的幾個比較重要的調優引數,及其影響的方式和大概實現。
引數名作用範圍
預設值說明
備註actives
consumer
0每服務消費者每服務每方法最大併發呼叫數
0表示不限制
connections
consumer
對每個提供者的最大連線數,rmi、http、hessian等短連線協議表示限制連線數,dubbo等長連線協表示建立的長連線個數
dubbo時為1,及復用單鏈結
accepts
provider
0服務提供方最大可接受連線數
0表示不限制
iothreads
provider
cpu個數+1
io執行緒池大小(固定大小)
threads
provider
200業務執行緒池大小(固定大小)
executes
provider
0服務提供者每服務每方法最大可並行執行請求數
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就可以。
Dubbo常用調優引數
dubbo是阿里開源的一款流行的分布式服務框架,有必要了解其常用調優引數 引數名作用範圍預設值說明備註 threads provider 200業務處理執行緒池大小 iothreads provider cpu 1 io執行緒池大小 queues provider 0執行緒池佇列大小,當執行緒池滿時...
Dubbo 併發調優的幾個引數
消費端調優 一 connections 這個引數可以在服務提供端發布服務的時候配置,也可以在消費端引用服務的時候配置,但是這個值是只對消費端生效的,所以一般是服務提供端不建議配置,如果配置,請斟酌一下,詳情請檢視 對connections引數的設定 不管是在消費端或者服務提供端,如果對某個服務配置了...
Dubbo 併發調優的幾個引數
消費端調優 size medium color green b 一 connections b color size 這個引數可以在服務提供端發布服務的時候配置,也可以在消費端引用服務的時候配置,但是這個值是只對消費端生效的,所以一般是服務提供端不建議配置,如果配置,請斟酌一下,詳情請檢視 對con...