数据库连接池阻塞问题定位 ╰+攻爆jí腚メ 2022-10-07 02:56 38阅读 0赞 **北斗云数据库连接池阻塞** **问题定位** **二零二一年五月** # **北斗云数据库连接池阻塞问题定位** # * **问题描述** 北斗云系统反应部分商户服务异常,登录不上去等。 * **问题定位** 1. **查看错误日志** 由于北斗云是基于Haproxy做的负载均衡部署,所以第一反应就是是否有一个节点出问题了,及时查看问题定位。查看服务进程都在,发现123上的日志刷新频率很快,但是39上的基本不动,从日志情况来看,应该是39上的服务出问题了。(我们这里还需要提升 1、服务节点出现问题我们没有告警机制 2、我们不知道具体哪个节点问题,如果节点多了呢,还要每个看日志吗) 及时处理方案,39的流量负载切换到123上,由123提供服务,先保证生产问题得以解决。然后保留现场,39服务先不动,方便问题定位。 1. **定位问题** curl 模拟调用39服务接口,发现只打印了controller入参,然后线程阻塞,无任何响应,日志也无任何报错信息。刚开始以为是java线程问题,查看代码后发现这个接口比较简单,就是根据渠道编号查询了下渠道信息,没有启用多线程。感觉线程阻塞在了数据库查询这里,重新换了个登录接口模拟调用了下,发现最后一条日志打印是卡在用户信息查询数据库之前。现在大概确定是阻塞在数据库连接这里。 1. **druid配置** 查看北斗云项目数据库配置,有小问题,但没发现太致命的问题 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpbnB6_size_16_color_FFFFFF_t_70][] ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpbnB6_size_16_color_FFFFFF_t_70 1][] 1. **线程问题定位** 查看39北斗云进程和线程情况,发现线程一直阻塞叠加 top -Hp pid 服务器保留快照dump文件,线程分析。 在线分析工具 [https://gceasy.io/ft-index.jsp][https_gceasy.io_ft-index.jsp] ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpbnB6_size_16_color_FFFFFF_t_70 2][] ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpbnB6_size_16_color_FFFFFF_t_70 3][] 从这个线程阻塞的情况分析,进入 com.yuantiao.report.web.channel.ChannelController.findChannelConfigInfoByChannelId(ChannelController.java:22) 阻塞在java.util.concurrent.locks.AbstractQueuedSynchronizer ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpbnB6_size_16_color_FFFFFF_t_70 4][] 那么这个锁的来源呢,再往下看 druid.pool com.alibaba.druid.pool.DruidDataSource.takeLast(DruidDataSource.java:2002) 查看这部分源码 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpbnB6_size_16_color_FFFFFF_t_70 5][] ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpbnB6_size_16_color_FFFFFF_t_70 6][] 这里我们一直没想明白,为什么会走 takeLast? 不是配置了maxWait吗? 1. **debug确认问题** DruidDataSource 断点,发现druid的max\_wait配置为默认的-1,配置未生效。 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpbnB6_size_16_color_FFFFFF_t_70 7][] 查看配置格式,及druid版本问题等,都未解决问题。 1. **问题确认** 最后,在查看druid配置config源码时,发现项目有个自定义的配置。 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpbnB6_size_16_color_FFFFFF_t_70 8][] 自定义位置和实际配置位置不符,导致配置不生效。 最后取消自定义配置类,用原生配置类,重启配置生效。 * **Druid连接池问题场景还原** 期待下次报告。 参考 [https://www.cnblogs.com/halberd-lee/p/11304790.html][https_www.cnblogs.com_halberd-lee_p_11304790.html] [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpbnB6_size_16_color_FFFFFF_t_70]: /images/20221005/5d8ce774eb9c43088b858ecb4fe3ba1f.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpbnB6_size_16_color_FFFFFF_t_70 1]: /images/20221005/cdc90cf497774cd198235bd4fbbe694e.png [https_gceasy.io_ft-index.jsp]: https://gceasy.io/ft-index.jsp [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpbnB6_size_16_color_FFFFFF_t_70 2]: /images/20221005/bb093b8849a542b39c836268c3da7af3.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpbnB6_size_16_color_FFFFFF_t_70 3]: /images/20221005/e7a3b17322c64ec0948bfd438300b4f2.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpbnB6_size_16_color_FFFFFF_t_70 4]: /images/20221005/223eca3e808e48b09ec08f4fc3b3f1ba.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpbnB6_size_16_color_FFFFFF_t_70 5]: /images/20221005/5c107db0fb0d4a18a89eb5466172b1ba.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpbnB6_size_16_color_FFFFFF_t_70 6]: /images/20221005/91fcba13922c4d8294e2db71ddc18998.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpbnB6_size_16_color_FFFFFF_t_70 7]: /images/20221005/70b0a8784d994455b30883a7b89fcce9.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpbnB6_size_16_color_FFFFFF_t_70 8]: /images/20221005/801d56f4138149e584f74f66802d6f61.png [https_www.cnblogs.com_halberd-lee_p_11304790.html]: https://www.cnblogs.com/halberd-lee/p/11304790.html
相关 数据库-----数据库连接池 @百度百科 ![Center][] [Center]: /images/20220721/39979dcdad014fb6a1579254a5398d26.png 古城微笑少年丶/ 2022年09月21日 11:56/ 0 赞/ 250 阅读
相关 数据库连接池和Tomcat连接池的配置问题 在做系统优化的时候师哥给我们提了一个连接池的概念,问我们有没有配置,我对这个概念一无所知,于是进行了一些研究,连接池有很多,比如WCF、EF还有数据库、CA 小咪咪/ 2022年08月01日 15:50/ 0 赞/ 183 阅读
相关 数据库连接池 数据库连接池 1.概述 > 数据库连接池就是存放数据库连接(Connection)的集合 > 我们获取一个数据库连接是一个相对很麻烦的过程,如果我们获取一个数据 电玩女神/ 2022年06月09日 05:28/ 0 赞/ 278 阅读
相关 数据库连接池 连接池:把连接放在一个池里,它里面有很多连接 会给你空闲的连接使用,Java从数据源里面的得到连接 (线程池把连接放进去,会有连接的标志--占用/空闲 你去拿时-- 给你/等 一时失言乱红尘/ 2022年05月16日 00:16/ 0 赞/ 298 阅读
相关 数据库连接池 连接池直接使用别人提供的就可以,需要做的就是导入jar包和配置文件的使用按照他们的规范 jar包有 (fastjson.jar包可以不要,这个是使用json和前端进行数据交 快来打我*/ 2022年05月04日 03:27/ 0 赞/ 306 阅读
相关 数据库连接池 要是考虑到JDBC连接中用到Connection 在每次对数据进行增删查改都要开启、关闭,在实例开发项目中,浪费了很大的资源。因此采用连接池技术。 //数据库连接 pub 秒速五厘米/ 2022年02月14日 00:27/ 0 赞/ 347 阅读
相关 数据库连接池 一般进行数据库链接之前会建立对象Connection con = null; 在数据库操作完成之后会关闭数据库链接对象,即con.close(); 数据库连接池的概念是在 布满荆棘的人生/ 2021年12月15日 23:59/ 0 赞/ 384 阅读
相关 数据库连接池 今日知识 1. c3p0和Druid使用 2. DBUtils使用 3. SpringJDBC轻量级框架 4. 总结 c3p0和Dru 小鱼儿/ 2021年11月29日 10:36/ 0 赞/ 411 阅读
相关 数据库连接池 传统的jdbc连接数据库方式如下: 我们需要几个步骤:注册 JDBC 驱动程序注册( Class.forName(DRIVER\_NAME) ),通过DriverManag 爱被打了一巴掌/ 2021年09月10日 05:40/ 0 赞/ 522 阅读
还没有评论,来说两句吧...