背景:线上不停的有超时告警和错误告警
现象:查看错误日志有大量的
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 分摊流量