現象:查看錯誤日誌有大量的
cause: org.apache.dubbo.remoting.RemotingException: Server side( xx.xx.xxx.xxx,20993 ) thread pool is exhausted, detail msg:Thread pool is EXHAUSTED! Thread Name: DubboServerHandler-xx.xx.xxx.xxx:20993 , Pool Size: 200 (active: 198, core: 200, max: 200, largest: 200), Task: 17529516 (completed: 17529318), Executor status:(isShutdown:false, isTerminated:false, isTerminating:false), in dubbo://xx.xx.xxx.xxx:20993 !
排查思路:
1、檢查是否流量有激增
排查結果:沒有特別大的波動
2、排查調用下遊的服務(包括MySQL)有沒有時延激增
排查結果:沒有
3、檢查容器的CPU/內存/網絡/磁盤各個參數
排查結果:容器的沒有
4、排查宿主機的CPU/內存/網絡/磁盤各個參數
排查結果:磁盤的IO滿了。最後確認是運維在做磁盤集群升級
針對各種原因導致的線程池滿了的情況的處理方式
1、流量激增的原因導致的
解決方案:
1、消費者加緩存,不要每次都調用 dubbo 接口; 這種針對實時性要求不高,變化不大的數據
2、修改 dubbo 線程池配置,200 -> 300 ,但不要太大 這個要看自己的服務配置
3、新建 pod 分攤流量