記一次生產dubbo線程池耗盡的問題


問題:

  dubbo線程池耗盡,活躍線程數超過線程池最大線程數(dubbo默認線程池最大線程數為200)

 

 登錄服務提供者所在服務器

通過命令行連接dubbo:

//telnet 服務提供者ip dubbo端口
telnet 20.1.16.26 20881

查看dubbo活躍線程:

status -l

 

 可以通過增加線程池最大線程數來解決:

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

timeout="5000":設置遠程調用服務的超時時間為5000毫秒
threadpool="fixed":線程模型為固定大小的線程池,啟動時建立線程,不關閉,一直持有
threads="500":線程數為500
accepts="1000":限制服務器端的接受的連接的最大值為1000

 

導致原因:

  服務提供者數據源連接池最大連接數300,提供者數據庫連接池連接數在高峰時已經超過最大連接數,導致服務調用響應速度非常慢,請求全部超時,而dubbo請求超時是針對客戶端的,客戶端阻塞的線程報錯拋出超時異常,而此時服務端的線程不會拋超時異常,服務端線程不會釋放,而是繼續執行,然后根據默認的重試機制,再次發起請求,服務端再次從線程池拿線程處理請求,循環往復,服務端dubbo的線程長時間保持連接,一直未釋放,越來越多,導致活躍線程超過最大線程數,最終報出線程池滿的異常

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM