美文网首页
2020-02-29 线上服务数据库连接池打满

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

作者: 寒叶xly | 来源:发表于2020-02-29 17:51 被阅读0次
    背景

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

    异常现象

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

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

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

    反思
    • 代码异常可以避免,将sessionHodler放到每个线程中创建
    • 首先发现异常的是我,但是我却没有及时反馈,导致错过修复的最佳时期
    解决措施
    • 代码回滚
    • 增加监控报警
    • 新上逻辑新增codereview
    • 遇见异常,及时抛出

    相关文章

      网友评论

          本文标题:2020-02-29 线上服务数据库连接池打满

          本文链接:https://www.haomeiwen.com/subject/flkmhhtx.html