滥用线程池引发的问题

前不久,由于组内一个同事滥用线程池造成了一起比较严重的线上故障。现在记录一下,防止自己以后犯同样的错误。

A接口是用来返回所有类型的光线数据的同步接口。某种特定的光线x3用了一个线程池(线程池里面有两个线程,将一个任务拆成两个来同时进行,等两个线程的任务完成后合并数据并返回),来加快光线x3的生成速度。光线x3的qps不是很大, 但是A接口的qps比较大。然后将用于生成光线x3的线程池,应用到了整个A接口上,造成了服务器雪崩。

我们知道每个请求会有一个线程来处理,现在所有请求接口A的线程执行生成光线逻辑的时候都会用到这个线程池,如果前一个请求还没有处理完(这个请求可能是一个比较复杂的请求, 耗时可能会比其他请求多很多)还在用线程池的话, 后面的线程只能等待,并发量大的话,任务消化不了,将会堆积越来越多的线程等待。请求服务接口的线程也是放在线程池里面的, 如果线程用光了,其他调用服务的消费者不光不能使用A接口,其他所有的接口也可能用不了。

如果接口A没有用到线程池,执行接口A逻辑的线程都有可能被分到时间片来执行任务(虽然某些请求返回比较慢,但不会卡住其他请求),也就不会这么容易就造成雪崩。

 

总结:在并发量大的情况下,不要试图使用线程池来加快单个请求的速度。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值