记一次由于mongo引起的线上事故分析

博客以Java代码为例,讲述异步线程执行mongo写入的情况。线程配置看似合理,但当mongo服务因其他应用流量大响应变慢,insert操作变慢会占满异步线程池容量,代码未捕获异常会导致后续请求抛异常影响主流程,强调异步线程使用要捕获异常。

直接上代码:
在这里插入图片描述
可以看到上图中,异步线程执行mongo的写入,这里没看到多大问题。
我们去看看这个异步线程的配置:
在这里插入图片描述

线程配置的最小20,最大50,等待时间10s,任务task容量1000,按道理说这样的配置可以了,应该没什么问题。那什么情况下会出现问题呢?
mongo服务是各方使用的,而此时由于其他一个应用流量过大,而导致mongo服务响应变慢,这时我们代码就出现问题了。
当mongo的insert变慢,这势必会占用我们的异步线程池容量,当线程被打满时会出现什么,当然是抛出异常。而我们代码中没有对异常进行捕获,所以后面的请求到这里就直接抛出异常了,主要流程影响使用。
所以,异步线程的使用需要对异常进行捕获,以免影响主流程使用,如下更改就好:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值