2020-02-29 线上服务数据库连接池打满

背景

通过定时任务对批量数据进行数据库操作,使用到线程池,并且使用到了生产者消费者设计模式。

异常现象

新的请求拿不到数据库连接,提示连接池连接已满

异常代码
SessionHolder sessionHolder = new SessionHolder(new Session());
        Executors.newFixedThreadPool(10).submit(()->{
            // 1.查询数据表
            minder.getFromDb();
            // 2.此处释放线程
            sessionHolder.released();
        });
原因

由于一个SessionHolder 对象只能对一个session进行release,导致线程池中的其他的线程无法被release

反思
  • 代码异常可以避免,将sessionHodler放到每个线程中创建
  • 首先发现异常的是我,但是我却没有及时反馈,导致错过修复的最佳时期
解决措施
  • 代码回滚
  • 增加监控报警
  • 新上逻辑新增codereview
  • 遇见异常,及时抛出
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容