DUBBO Thread pool is EXHAUSTED!

weixin_34253539發表於2018-04-04

一、問題

在測試環境遇到的異常資訊,如下:

16-10-17 00:00:00.033 [New I/O server worker #1-6] WARN com.alibaba.dubbo.common.threadpool.support.AbortPolicyWithReport – [DUBBO] Thread pool is EXHAUSTED! Thread Name: DubboServerHandler-10.0.0.77:20703, Pool Size: 500 (active: 500, core: 500, max: 500, largest: 500), Task: 5897697 (completed: 5897197), Executor status:(isShutdown:false, isTerminated:false, isTerminating:false), in dubbo://10.0.0.77:20703!, dubbo version: 2.5.3, current host: 127.0.0.116-10-17 00:00:00.033 [New I/O server worker #1-6] WARN org.jboss.netty.channel.DefaultChannelPipeline – [DUBBO] An exception was thrown by a user handler while handling an exception event ([id: 0x3c650867, /10.0.0.83:53184 => /10.0.0.77:20703] EXCEPTION: com.alibaba.dubbo.remoting.ExecutionException: class com.alibaba.dubbo.remoting.transport.dispatcher.all.AllChannelHandler error when process received event .), dubbo version: 2.5.3, current host: 127.0.0.1com.alibaba.dubbo.remoting.ExecutionException: class com.alibaba.dubbo.remoting.transport.dispatcher.all.AllChannelHandler error when process caught event . at com.alibaba.dubbo.remoting.transport.dispatcher.all.AllChannelHandler.caught(AllChannelHandler.java:67) ~[dubbo-2.5.3.jar:2.5.3]

二、問題分析

專案的實際配置:

  1. <dubbo:provider timeout="50000" threadpool="fixed" threads="500" accepts="1000" />

timeout=”5000″:設定遠端呼叫服務的超時時間為5000毫秒
threadpool=”fixed”:執行緒模型為固定大小的執行緒池,啟動時建立執行緒,不關閉,一直持有
threads=”500″:執行緒數為500
accepts=”1000″:限制伺服器端的接受的連線的最大值為1000

再看看dubbo官網上的執行緒模型的內容


  • Dispatcher

    • all 所有訊息都派發到執行緒池,包括請求,響應,連線事件,斷開事件,心跳等。

    • direct 所有訊息都不派發到執行緒池,全部在IO執行緒上直接執行。

    • message 只有請求響應訊息派發到執行緒池,其它連線斷開事件,心跳等訊息,直接在IO執行緒上執行。

    • execution 只請求訊息派發到執行緒池,不含響應,響應和其它連線斷開事件,心跳等訊息,直接在IO執行緒上執行。

    • connection 在IO執行緒上,將連線斷開事件放入佇列,有序逐個執行,其它訊息派發到執行緒池。

  • ThreadPool

    • fixed 固定大小執行緒池,啟動時建立執行緒,不關閉,一直持有。(預設)

    • cached 快取執行緒池,空閒一分鐘自動刪除,需要時重建。

    • limited 可伸縮執行緒池,但池中的執行緒數只會增長不會收縮。(為避免收縮時突然來了大流量引起的效能問題)。

配置如:

<dubbo:protocolname="dubbo"dispatcher="all"threadpool="fixed"threads="100"/>

配置標籤

<dubbo:provider/>

<dubbo:protocol/>

例:

<!– 當ProtocolConfig和ServiceConfig某屬性沒有配置時,採用此預設值 –>
<dubbo:provider timeout=”10000″ threadpool=”fixed” threads=”100″ accepts=”1000″ />

<dubbo:protocol/>

https://github.com/HadesJK/dubbo-demo



相關文章