记录一次driud连接池的连接数用完问题

 一、问题描述:

        最直观的表现就是生产上项目崩了,无法访问。

二、分析原因:

        通过查看生产日志,出现了大量的获取连接超时异常,具体如下:

org.springframework.jdbc.CannotGetJdbcConnectionException:Failed to obtain JDBC Connection;nested exception is com.alibaba.druid.pool.GetConnectionTimeoutException:  
wait millis 60000,active 20,maxActive 20,creating 0,runningSqlCount20: UPDATE TAB_A SET  F1_NAME=?,F2=?,F3=? WHERE ID=?

我们项目druid的最大连接数配置的是20,最大等待时间是60s

从报错日志可以看出20连接全部被占用了,没有可用的连接了。

通过打印的堆栈信息找到对应的代码,结合业务场景。大概如下:

        大概是我们有一个功能是从execl导入大量数据,这个导入功能读取到execl数据后,循环遍历每条记录,如果判断这条数据已经存在,这根据id更新多个字段内容,如果数据不存在则是插入记录。且这个导入功能的接口上加了事务注解。还有一个就是代码问题,这个导入接口的循环代码写的有问题,造成循环次数成倍增加。这就造成这个导入功能执行的时间很长,大概10个小时左右。

        好巧不巧,正在我们导入数据的时候,另外一个系统的定时任务启动了,大概功能是更新我们这个表的的数据。这个作业是逐条更新我们表记录。

        由于我们导入功能的接口有事务且执行时间长,所以更新的记录都锁着,等待事务提交后释放锁。在数据还没有导入完(即事务还没有提交时),其他系统有更新这张表里我们锁定的数据,且对方系统是调我们接口是每次更新一条记录,每一调一次就占用一个数据库连接,且对方系统基本上都是更新我们锁了的记录。只要调我们19次锁定的记录,连接池里20个连接数就用完了。因为数据一直被锁着,等待60秒没有获取连接就抛出了上面的异常

        这就造成了连接池泄露,如果连接池泄露就会造成系统崩溃(具体连接池泄露如何造成系统崩溃的不知道原因,希望了解的大神指点一二)。

三、解决办法

        把导入功能改成异步导入,每1000条记录启动一个线程更新一次,且把事务去掉。

        另外我们这个导入只有一次,和对方系统商量等我们导入完成后他们在启动定时任务。

    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/200819.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 网络爬虫(四):初识网络爬虫

《Python入门核心技术》专栏总目录・点这里 文章目录 什么是爬虫爬虫的工作原理应用场景反爬虫合法和道德问题Robots 协议练习爬虫的一些网站总结 大家好,我是水滴~~ 在当今数字化时代,互联网上充斥着大量的数据和信息,而我们常常需要从这个…

vue运用之echart柱状图3D效果案例代码

前言 在ECharts中,创建3D柱状图需要使用GL模块,并设置type为’bar3D’ 柱状图案例可参考,我的这篇文章 Echarts之柱状图 3D柱状图的示例代码 // 引入ECharts主模块 var echarts = require(echarts); // 引入3D模块 var GL = require(echarts/util/graphic/GL

思维模型 移情效应

本系列文章 主要是 分享 思维模型,涉及各个领域,重在提升认知。情感迁移,爱屋及乌。 1 移情效应的应用 1.1 移情效应在市场营销中应用-多芬(Dove)“真美运动” 多芬(Dove)是一家知名的个人护理…

软件工程 复习笔记

目录 概述 软件的定义,特点和分类 软件的定义 软件的特点 软件的分类 软件危机的定义和表现形式 软件危机 表现形式 软件危机的产生原因及解决途径 产生软件危机的原因 软件工程 概念 软件工程的研究内容和基本原理 内容 软件工程的基本原理 软件过程…

Redis使用Lua脚本

Lua脚本 redis可以支持lua脚本,可以使用lua脚本来将几个命令整合为一个整体来执行,这样可以使得多个命令原子操作,且可以减少网络开销 Lua的数据类型 Lua是一个动态类型的语言,一个变量可以存储任何类型的值,类型有&am…

27、卷积 - 卷积特征的可视化和一个神奇的网站

既然上一节说了卷积的本质是一个特征提取器,那么既然卷积神经网络在图像分类、图像检测、图像分割以及其他领域有这么好的表现,卷积算法到底提取了什么特征呢? 虽然有时候我们说神经网络是个黑盒,但是研究人员也一直在探索,如何将卷积学习到的特征给分析出来。 就是想要…

我们是如何让微服务在实践中“活色生香”的?

文章目录 🔊博主介绍🥤本文内容1. 前言2. 请求的路径分析3. 服务周期分析4. 请求格式转换5. 服务层设计6. 业务服务层设计7. 安全防护及策略8. 结论 📢文章总结📥博主目标 🔊博主介绍 🌟我是廖志伟&#xf…

带你学C语言:带你学函数

目录 🌍函数的概念 ★★☆☆☆库函数 ★★★★☆自定义函数 ★★★☆☆形参与实参 ★★★☆☆return语句 ★★★☆☆数组做函数参数 ★★★☆☆嵌套调用和链式访问 ★★★☆☆函数的声明和定义 ✍结束语 🌍函数的概念 数学中我们其实就见过函数…

系统运维安全之病毒自检及防护

一、前言 Linux勒索病毒(Linux ransomware)是一种最令人恶心的计算机恶意病毒,它以侵入Linux系统,捆绑文件并要求支付赎金才能释放文件为主要目的,破坏用户的数据,造成数据讹诈。Linux勒索病毒它们的存在已…

【华为OD题库-072】相对开音节-java

题目 题目描述: 相对开音节构成的结构为辅音元音(aeiou)辅音(r除外)e 常见的单词有bike cake 给定一个字符串,以空格为分隔符反转每个单词的字母 若单词中包含如数字等其他非字母时不进行反转 反转后计算其中含有相对开音节结构的子串个数(连续子串中部分字符可以重…

算法通关村第十七关-青铜挑战贪心算法思想

大家好我是苏麟 , 今天说说贪心算法 . 贪心思想很难用理论解释,本文我们先通过案例来感受一下贪心是如何解决问题的 大纲 难以理解的贪心算法贪心问题举例分发饼干柠檬水找零分发糖果 难以理解的贪心算法 贪心的思想非常不好解释,而且越使用权威的语言解…

如何解读手机APP入侵与逆向破解

如果您有耐心看完这篇文章,您将懂得如何着手进行app的分析、追踪、注入等实用的破解技术,另外,通过“入侵”,将帮助您理解如何规避常见的安全漏洞,文章大纲: 简单介绍ios二进制文件结构与入侵的原理介绍入…

报错:Parsed mapper file: ‘file mapper.xml

报错 : Logging initialized using class org.apache.ibatis.logging.stdout.StdOutImpl adapter. Registered plugin: com.github.yulichang.interceptor.MPJInterceptor3b2c8bda Parsed mapper file: file [/Mapper.xml] application无法启动 我这边产生原因是项…

P1004 [NOIP2000 提高组] 方格取数

洛谷的题 网址:P1004 [NOIP2000 提高组] 方格取数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 动态规划,太tm爽了 一般来说是走一次的,这个是走两次,就变难了 怎么办呢? 一个方法是:同时开始走 先…

自定义TypeHandler 将mysql返回的逗号分隔的String转换到List

sql执行如下&#xff1a; 这里我定义的接受类&#xff1a; 但是这里报了错JSON parse error: Cannot deserialize value of type java.util.ArrayList<java.lang.String>from Object value (token JsonToken.START_OBJECT); nested exception is com.fasterxml.jackson…

C读取CSV文件,通过某种条件,按照特定行和同一列进行读取

读取CSV文件&#xff0c;按照特定行和列进行读取 1、source #define _CRT_SECURE_NO_WARNINGS#include <stdio.h> #include <wchar.h> #include <locale.h>#define MAX_LINE_LENGTH 1000 #define MAX_COLUMNS 50// 函数声明 int findTargetColumn(wchar_t*…

Java抽象类(abstract class)和接口(interface)的区别——面试

1.抽象类&#xff08;abstract class&#xff09;和接口&#xff08;interface&#xff09;的区别&#xff1a; 抽象类可以有构造方法&#xff0c;接口中不能有构造方法。 抽象类中可以有普通成员变量&#xff0c;接口中没有普通成员变量。抽象类中可以包含非抽象的普通方法&am…

ultralytics yolo图像分类训练案例;pytorch自有数据集图像分类案例

1、ultralytics yolo图像分类训练案例 优点:使用方便,训练过程评估指标可以方便查看 缺点:自带模型少,可选择自定义小 参考:https://docs.ultralytics.com/tasks/classify/#val https://blog.csdn.net/weixin_42357472/article/details/131412851 1)数据集格式 https://…

dockerdesktop 制作asp.net core webapi镜像-连接sqlserver数据库容器

1.使用visual studio 创建 asp.net core webapi项目 选择启用docker 会生成Dockerfile文件 2.使用efcore连接数据库&#xff0c;安装efcore的包 <ItemGroup><PackageReference Include"Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version&qu…

Linux系统调试课:PCIe调试手段

文章目录 一、lspci 命令二、pciutils 工具沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本文我们要介绍pcie调试手段。 一、lspci 命令 通过lspci可以查看当前系统挂载了哪些pci设备。 lspci - 列出 PCI 设备 lspci 命令可以列出计算机中所有 PCI 设备的详细信息,…