DBCP连接池配置参数

dbcp 连接池不合理的锁导致连接耗尽解决方案 dbcp 连接池不合理的锁导致连接耗尽解决方案 应用报错,表象来看是连接池爆满了。 org.springframework.transaction.CannotCreateTransactionException: Could not open JDBC Connection for transaction; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot get a connection, pool exhausted at org.springframework.jdbc.dataso 立即下载

initialSize="10"     

     初始化连接,连接池启动时创建的初始化连接数量(默认值为0)

maxActive="80"     
     最大活动连接,连接池中可同时连接的最大的连接数(默认值为8)

minIdle="10"     
     最小空闲连接,连接池中最小的空闲的连接数,低于这个数量会被创建新的连接(默认为0,该参数越接近maxIdle,性能越好,因为连接的创建和销毁,都是需要消耗资源的;但是不能太大,因为在机器很空闲的时候,也会创建低于minidle个数的连接,类似于jvm参数中的Xmn设置)

maxIdle="60"     
     最大空闲连接,连接池中最大的空闲的连接数,超过的空闲连接将被释放,如果设置为负数表示不限制(默认为8个,maxIdle不能设置太小,因为假如在高负载的情况下,连接的打开时间比关闭的时间快,会引起连接池中idle的个数上升超过maxIdle,而造成频繁的连接销毁和创建,类似于jvm参数中的Xmx设置)

maxWait="3000"     
     从池中取连接的最大等待时间,单位ms.当没有可用连接时,连接池等待连接释放的最大时间,超过该时间限制会抛出异常,如果设置-1表示无限等待(默认为无限)

validationQuery = "SELECT 1"     

     验证使用的SQL语句

testWhileIdle = "true"     
     指明连接是否被空闲连接回收器(如果有)进行检验.如果检测失败,则连接将被从池中去除.

testOnBorrow = "false"     
     借出连接时不要测试,否则很影响性能。一定要配置,因为它的默认值是true。false表示每次从连接池中取出连接时,不需要执行validationQuery = "SELECT 1" 中的SQL进行测试。若配置为true,对性能有非常大的影响,性能会下降7-10倍。

timeBetweenEvictionRunsMillis = "30000"
     每30秒运行一次空闲连接回收器,配置timeBetweenEvictionRunsMillis = "30000"后,每30秒运行一次空闲连接回收器(独立线程)。并每次检查3个连接,如果连接空闲时间超过30分钟就销毁。销毁连接后,连接数量就少了,如果小于minIdle数量,就新建连接,维护数量不少于minIdle,过行了新老更替。

minEvictableIdleTimeMillis = "1800000"
     池中的连接空闲30分钟后被回收

numTestsPerEvictionRun="3"
     在每次空闲连接回收器线程(如果有)运行时检查的连接数量

removeAbandoned="true"
     连接泄漏回收参数,当可用连接数少于3个时才执行

removeAbandonedTimeout="180"
     连接泄漏回收参数,180秒,泄露的连接可以被删除的超时值


注意事项

maxIdle值与maxActive值应配置的接近
     当连接数超过maxIdle值后,刚刚使用完的连接(刚刚空闲下来)会立即被销毁。而不是想要的空闲M秒后再销毁起一个缓冲作用。若maxIdle与maxActive相差较大,在高负载的系统中会导致频繁的创建、销毁连接,连接数在maxIdle与maxActive间快速频繁波动,这不是想要的。高负载系统的maxIdle值可以设置为与maxActive相同或设置为-1(-1表示不限制),让连接数量在minIdle与maxIdle间缓冲慢速波动。

timeBetweenEvictionRunsMillis建议设置值
minIdle要与timeBetweenEvictionRunsMillis配合使用才有用,单独使用minIdle不会起作用。

initialSize="5",会在tomcat一启动时,创建5条连接,效果很理想。但同时我们还配置了minIdle="10",也就是说,最少要保持10条连接,那现在只有5条连接,哪什么时候再创建少的5条连接呢?
     1、等业务压力上来了, DBCP就会创建新的连接。
     2、配置timeBetweenEvictionRunsMillis=“时间”,DBCP会启用独立的工作线程定时检查,补上少的5条连接。销毁多余的连接也是同理。



连接销毁的逻辑


DBCP的连接数会在initialSize - minIdle - maxIdle - maxActive  之间变化。变化的逻辑描述如下:
    默认未配置initialSize(默认值是0)和timeBetweenEvictionRunsMillis参数时,刚启动tomcat时,连接数是0。当应用有一个并发访问数据库时DBCP创建一个连接。目前连接数量还未达到minIdle,但DBCP也不自动创建新连接已使数量达到minIdle数量(没有一个独立的工作线程来检查和创建)。随着应用并发访问数据库的增多,连接数也增多,但都与minIdle值无关,很快minIdle被超越,minIdle值一点用都没有。直到连接的数量达到maxIdle值,这时的连接都是只增不减的。 再继续发展,连接数再增多并超过maxIdle时,使用完的连接(刚刚空闲下来的)会立即关闭,总体连接的数量稳定在maxIdle但不会超过maxIdle。
    但活动连接(在使用中的连接)可能数量上瞬间超过maxIdle,但永远不会超过maxActive。这时如果应用业务压力小了,访问数据库的并发少了,连接数也不会减少(没有一个独立的线程来检查和销毁),将保持在maxIdle的数量。

    默认未配置initialSize(默认值是0),但配置了timeBetweenEvictionRunsMillis=“30000”(30秒)参数时,刚启动tomcat时,连接数是0。马上应用有一个并发访问数据库时DBCP创建一个连接。目前连接数量还未达到minIdle,每30秒DBCP的工作线程检查连接数是否少于minIdle数量,若少于就创建新连接直到达到minIdle数量。
    随着应用并发访问数据库的增多,连接数也增多,直到达到maxIdle值。这期间每30秒DBCP的工作线程检查连接是否空闲了30分钟,若是就销毁。但此时是业务的高峰期,是不会有长达30分钟的空闲连接的,工作线程查了也是白查,但它在工作。到这里连接数量一直是呈现增长的趋势。
    当连接数再增多超过maxIdle时,使用完的连接(刚刚空闲下来)会立即关闭,总体连接的数量稳定在maxIdle。停止了增长的趋势。但活动连接(在使用中的连接)可能数量上瞬间超过maxIdle,但永远不会超过maxActive。
     这时如果应用业务压力小了,访问数据库的并发少了,每30秒DBCP的工作线程检查连接(默认每次查3条)是否空闲达到30分钟(这是默认值),若连接空闲达到30分钟,就销毁连接。这时连接数减少了,呈下降趋势,将从maxIdle走向minIdle。当小于minIdle值时,则DBCP创建新连接已使数量稳定在minIdle,并进行着新老更替。







SystemVerilog实战:AXI Stream协议从零搭建(附完整代码解析) 本文详细介绍了如何使用SystemVerilog从零搭建AXI Stream协议,包括核心信号解析、接口设计、主从设备实现及验证环境构建。通过完整的代码示例和工程实践技巧,帮助开发者掌握AXI Stream在FPGA/ASIC设计中的高效数据传输方法,特别适合视频处理和网络数据传输等应用场景。 阅读详情

相关推荐

牛顿法vs高斯牛顿法vs LM算法:三行代码说清核心区别(附性能对比表格)

本文通过对比牛顿法、高斯牛顿法和LM算法的核心迭代代码,揭示了三者在非线性最小二乘优化中的本质区别。LM算法通过引入阻尼因子,在高斯牛顿法的快速收敛与梯度下降的稳定性之间取得平衡,成为工程实践中鲁棒性最强的首选。文章还提供了清晰的性能对比表格,帮助开发者根据初始估计和问题性质快速选择合适算法。

weixin_29062255的博客 419

Could not open JDBC Connection for transaction; nested exception is com.alibaba.druid.pool.DataSourc

项目中使用了阿里的 Druid 数据库,刚开始很正常,后来发现出现了问题,问题如下: 日志比较多,重点有以下几个: 其他的我们截图看看: 上图打码的地方是公司的dao层查数据库的代码。意思很明白了,就是因为在进行查询的时候,连接已经关闭了,而且会一直刷出这样的日志。综合网上大家的意见,可能原因主要有以下几点: 博主给的答案是: 参考:Druid连接池自动关闭其实这个答案和上面一个的说法一致,不过这个给出了解决方案:是否在定时器中手动获取了 DataSource,然后使用后关闭了或者用完后长期不再用被连接池自

帝上无天的博客 2万+

Ansys Zemax与Speos协同设计:从HUD光学优化到驾驶环境可视化全流程解析

本文深入解析了如何利用Ansys Zemax与Speos进行协同设计,实现从HUD光学系统核心优化到驾驶环境可视化验证的全流程。文章强调了HUD设计是光学性能与视觉感知的深度耦合,通过Zemax进行精密光学设计,再利用Speos进行系统级仿真与感知模拟,最终完成从虚拟到现实的闭环验证,有效提升HUD产品的开发效率与可靠性。

weixin_29199873的博客 243

Could not open JDBC Connection for transaction; nested exception is java.sql.SQLNonTransientConnecti

使用MyBatis的SqlSession是不会自动关闭数据源连接的,需要使用Spring包装过的SelSqlSessionTemplate才会自动关闭数据源连接。所以每次执行一个请求对应的方法,都会占用一个数据源连接而不被释放,最终导致数据源连接池被占满,无法开启新的连接。配置数据连接的字段上加一个useSSL=false;

moteandsunlight的博客 1万+

目标检测 RT-DETR(2023)详细解读

在使用了这个技巧后,显然训练过程中,类别的标签不再是此前的0和1离散值,而是0~1的连续值。关于 Query Selection(查询向量选择),大家应该并不陌生,这个方法可谓在DETR领域大杀四方,如DAB-DETR对查询向量进行重构理解,将其解释为Anchor,DN-DETR通过查询降噪来应对匈牙利匹配的二义性所导致的训练时间长的问题,DINO提出从Encoder中选择Top-k特征进行学习等一系列方法,这都无疑向我们证明,查询向量很重要,选择好的Query能够让我们事半功倍。在RT-DETR中,

qq_51352130的博客 5869

Alphafold2/multimer Conda环境配置与GPU加速优化指南

本文详细介绍了如何在本地服务器或工作站上,通过Conda环境配置并优化GPU加速来部署Alphafold2及其多聚体版本Alphafold2-multimer。内容涵盖从硬件准备、依赖安装、数据库部署到实战预测与常见报错处理的全流程,重点解决了本地安装过程中的依赖冲突与GPU调用失败等关键问题,帮助研究人员高效运行这一蛋白质结构预测工具。

neovim7hacker的博客 470

Could not open JDBC Connection for transaction; nested exception is org.apache.commons.dbcp.SQLNeste

在做负载均衡过程中,在多个服务器上部署了同样一套程序,数据库用的同一个,其中有两个服务器启动时正常,只要访问就报错如下:Could not open JDBC Connection for transaction;最终排查是因为服务器默认安装的是openJDK低版本(1.8.3xxxxx),而项目需要的是(jdk1.8.9xxxxx)

七夜zippoe的博客 4733

Qt EGLFS 图形后端详解

EGLFS (EGL Full Screen) 是Qt框架在嵌入式Linux系统中的高性能图形显示后端,它提供了直接基于EGL和OpenGL ES的硬件加速渲染解决方案。

浩瀚之水的专栏 512

MYSQL报错-CannotCreateTransactionException: Could not open JDBC Connection for transaction 问题分析及解决方案

org.springframework.transaction.CannotCreateTransactionException: Could not open JDBC Connection for transaction; nested exception is java.sql.SQLTransientConnectionException: HikariPool-3 - Connection is not available, request timed out after 30001ms.

m0_57640408的博客 1万+

Sparse-ICP—(4) 加权稀疏迭代最近点算法(matlab版)

本文介绍了加权稀疏迭代最近点算法的实现。

点云侠的博客 642

Open Dynamics Engine(ODE)物理引擎教程(1)--下载与安装准备

引言 ODE是一个免费的工业级库,用于模拟关节式刚体动力学,例如地面车辆、腿部生物和虚拟现实环境中的移动对象。它具有快速、灵活、健壮和独立于平台的特点,具有先进的关节、摩擦接触和内置的碰撞检测功能。 项目主页:http://www.ode.org/ 线上手册:http://ode.org/wiki/index.php?title=Manual 本教程为博主亲自亲测过程的总结,转载请注明出处! ...

腿足机器人领域 2216

DBCP连接池配置参数详解

initialSize="10" 初始化连接,连接池启动时创建的初始化连接数量(默认值为0) maxActive="80" 最大活动连接,连接池中可同时连接的最大的连接数(默认值为8) minIdle="10" 最小空闲连接,连接池中最小的空闲的连接数,低于这个数量会被创建新的连接(默认为0,该参数越接近maxIdle,性能越好,因...

u011007997的专栏 1392

(四) OpenClaw-Skill技能全面了解和自定义技能

OpenClaw Skills是提升AI代理功能性的关键模块。本文系统介绍了Skills的核心概念、获取渠道和创建方法。Skills作为标准化指令集合,能让OpenClaw从单纯理解升级为实际执行任务,相比传统System Prompt具有模块化、可复用等优势。用户可通过Clawhub官方商店、GitHub社区等渠道获取5700+现成技能,或按需开发自定义Skill。文章详细演示了创建"Hello World"示例技能的完整流程,包括编写Python脚本、配置SKILL.md文件、部署。

直到世界的尽头 8295

DBCP连接池配置参数说明及优化

在配置DBCP连接池时,主要难以理解的主要有:removeAbandoned 、logAbandoned、removeAbandonedTimeout、maxWait这四个参数,设置了rmoveAbandoned=true那么在getNumActive()快要到getMaxActive()的时候,系统会进行无效的Connection的回收,回收的Connection为removeAbandoned...

Night In Forest 957

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

DBCP连接池配置参数说明

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">

..7a. 6万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

DBCP连接池配置常用参数说明

参数 默认值 说明 username \ 传递给JDBC驱动的用于建立连接的用户名 password \ 传递给JDBC驱动的用于建立连接的密码 url \ 传递给JDBC驱动的用于建立连接的URL driverClassName \ 使用的JDBC驱动的完整有效的Java类名 initialSize ...

268

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

DBCP连接池配置参数注意事项

DBCP连接池配置参数注意事项【整合自网络】 maxIdle值与maxActive值应配置的接近。 因为,当连接数超过maxIdle值后,刚刚使用完的连接(刚刚空闲下来)会立即被销毁。而不是我想要的空闲M秒后再销毁起一个缓冲作用。这一点DBCP做的可能与你想像的不一样。 若maxIdle与maxActive相差较大,在高负载的系统中会导致频繁的创建、销毁连接,连接数在maxIdle与maxA...

wangdaowei90的专栏 385

dbcp连接池配置参数说明

&lt;bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"&gt;  &lt;property name="driverClassName" value="${db.driverClassName}"/&gt;  &lt;property

jianguangguo的专栏 333

DBCP 连接池(含代码)、BasicDataSource 配置参数 中文版

当使用BDCP 连接的时候 出现一下错误时: Caused By: java.lang.ClassNotFoundException: Class bytes found but defineClass()failed for: 'org.apache.commons.dbcp2.BasicDataSource' Caused By: java.lang.UnsupportedClassVer...

千寻的华尔兹的博客 2855

DBCP连接池配置详解,参数列表

Spring DBCP配置 &amp;lt;bean id=“dataSource” class=“org.apache.commons.dbcp.BasicDataSource” destroy-method=“close”&amp;gt; &amp;lt;property name=“driverClassNa...

随风飘扬 9831

DBCP(Database Connection Pool)连接池配置参数

的核心配置参数及其详细说明,适用于 Apache Commons DBCP 或基于 DBCP 的实现(如。通过合理配置 DBCP 连接池参数,可以显著提升数据库访问性能和稳定性。这些参数用于优化数据库连接的管理和性能。

kiwixing的博客 1224
上一篇: JMockit简单使用
下一篇: 基于zookeeper的分布式Queue
zero__007
博客等级 码龄12年 326粉丝 247原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值