druid连接池参数配置
最近发现生产环境经常有数据库连接超时的问题,排查发现是druid连接池参数设置不合理导致
总结问题如下:
为了防止僵尸连接,k8s ipvs做了连接超时限制,如果TCP连接闲置超过900s(15分钟),客户端再尝试通过这个连接去发起请求,数据包经过防火墙会被直接丢弃掉,无法到达服务端。
从客户端的角度来看,就是发送了数据包之后,阻塞等待服务端响应,但是很明显永远都不可能得到响应,自然就超时了。
所以在配置连接池的时候,需要避免连接长期闲置不释放;或者如果需要长期保留一些连接不释放,要有对应的连接保活机制
druid连接池配置属性介绍:https://github.com/alibaba/druid/wiki/DruidDataSource%E9%85%8D%E7%BD%AE%E5%B1%9E%E6%80%A7%E5%88%97%E8%A1%A8
下面介绍一下对我们影响较大的一些参数:
| 参数名 | 建议值 | 参数说明 |
connectionProperties | 不同数据库配置属性值有差异,比如pg的loginTimeout单位是秒(新版druid也是毫秒),MySQL是毫秒 pg建议配置: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000;loginTimeout=5;connectTimeout=5;socketTimeout=60 注意:新版druid(1.2.17开始)要求配置druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000;loginTimeout=5000;connectTimeout=5000;socketTimeout=60000 MySQL建议配置: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000;loginTimeout=5000;connectTimeout=5000;socketTimeout=60000connectTimeout为建立数据库连接的超时时间; 如果不设置loginTimeout,会在当前线程直接去建立连接;设置了loginTimeout,则会创建异步线程去建立连接。推测是为了防止底层系统阻塞,导致上层应用线程挂死; socketTimeout即readTimeOut,最大sql执行时间 | |
| maxWait | 5000 | 获取连接时最大等待时间,单位毫秒。默认-1 这个只是从连接池单次获取连接的等待时间,真正的建立数据库连接的超时时间,由上面的loginTimeout、connectTimeout决定 注意不能把maxWait理解为应用获取连接的最大耗时,因为这里只是单次从连接池获取连接的等待时间,实际获取连接的实现是一个无限循环:获取连接 → 校验连接 → 校验不通过则继续获取新的连接直到校验通过 所以我们把maxWait和validationQuery都设置为5s的时候,出现了实际获取连接耗时10s的情况,这是因为两次获取的连接都是僵尸连接,执行validationQuery的时候超时失败,第三次才获取到正常的连接 |
| maxActive | 20~50 根据应用具体情况设置,不建议设置太大 | 最大连接池数量 |
| minIdle | 0~5 | 最小连接池数量 如果没有配置maxEvictableIdleTimeMillis,则minIdle应该配置为0 |
| initialSize | 0~5 | 初始化时建立物理连接的个数 |
| timeBetweenEvictionRunsMillis | 30000 | 有两个含义: 1) Destroy线程会检测连接的间隔时间,如果连接空闲时间大于等于minEvictableIdleTimeMillis则关闭物理连接。 2) testWhileIdle的判断依据,详细看testWhileIdle属性的说明 |
| minEvictableIdleTimeMillis | 60000 | 连接保持空闲而不被驱逐的最小时间, 超过minIdle的连接,空闲时间大于这个值会被驱逐 |
| maxEvictableIdleTimeMillis | 120000 | 连接保持空闲而不被驱逐的最大时间,默认7小时 minIdle的连接,空闲时间大于这个值会被驱逐 之前就是因为这个值没有设置,且minIdle大于0,所以连接一直不会被驱逐 |
| validationQuery | SELECT 1 | 用来检测连接是否有效的sql 如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会起作用 |
| validationQueryTimeout | 5 | 单位:秒,检测连接是否有效的超时时间,根据配置选择使用发送ping或者执行validationQuery sql的方式进行连接校验 之前数据网关接口耗时30s多一点,其原因就是这个值配置为30s |
| testWhileIdle | true | 申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效 |
| testOnBorrow | false | 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能 |
| testOnReturn | false | 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能 |
| keepAlive | true | 连接池中的minIdle数量以内的连接,空闲时间超过minEvictableIdleTimeMillis,则会执行keepAlive操作 这个参数可能不会生效,最好不要依赖它来做连接保活 |
| poolPreparedStatements | false | 是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。 pg也建议关闭 |
| connectionErrorRetryAttempts | 1 | 异步创建连接的线程,在创建连接失败后会会进行计数,当errorCount小于等于connectionErrorRetryAttempts时会立刻进行失败重试。当errorCount大于connectionErrorRetryAttempts时,默认情况会sleep timeBetweenConnectErrorMillis(默认500ms)后再进行重试 |
| timeBetweenConnectErrorMillis | 500 | 默认500ms 见上面connectionErrorRetryAttempts释义 |
| breakAfterAcquireFailure | false | 注意这个值千万不要设为true 设为true,一旦创建数据库连接失败,创建连接的异步线程就会终止,导致的结果就是,偶尔的网络波动,会导致应用后续一直获取连接失败,即使网络恢复正常 参见:https://github.com/alibaba/druid/issues/2862 |
这里特别想吐槽下connectionProperties参数的设置,pg的设置原本单位是秒,1.2.17特意改成毫秒(可以看下面的代码对比)。虽然从统一性角度来说,确实用毫秒比较合理。但是对使用者来说,从低版本升级到高版本,参数配置突然就有问题了。真的很不友好


相关文章:
druid连接池参数配置
最近发现生产环境经常有数据库连接超时的问题,排查发现是druid连接池参数设置不合理导致 总结问题如下: 为了防止僵尸连接,k8s ipvs做了连接超时限制,如果TCP连接闲置超过900s(15分钟),客户端再尝试通过这个连接去发起…...
【OceanBase】通过 OceanBase 的向量检索技术构建图搜图应用
文章目录 一、向量检索概述1.1 关键概念① 非结构化数据② 向量③ 向量嵌入(Embedding)④ 向量相似性检索 1.2 应用场景 二、向量检索核心功能三、图搜图架构四、操作步骤4.1 使用 Docker 部署 OceanBase 数据库4.2 测试OceanBase数据库连通性4.3 开启数据库向量检索功能4.4 克…...
Linux 安装运行gatk的教程
1.下载安装 wget https://github.com/broadinstitute/gatk/releases/download/4.1.8.1/gatk-4.1.8.1.zip2.解压 unzip *.zip3.查看 gatk --help 如下显示表示安装成功: 注意:仅限在该包所在位置的路径下能使用...
什么是unit l2 norm
1. L2 Norm 定义 L2 norm(或称欧几里得范数)是用来衡量一个向量的“长度”或“大小”的一种方式。在 n 维空间中,给定一个向量V(V1,V2,…,Vn),其 L2 norm 定义为: 也可以理解为该向量与原点之间的欧几里得距离。 2…...
手写顺序流程图组件
效果图 完整代码 <template><div><div class"container" :style"{ width: ${spacingX * (colNum - 1) itemWidth * colNum}px }"><divv-for"(item, i) in recordList":key"i"class"list-box":style&…...
适配器模式概述
大体介绍 适配器模式(Adapter Pattern)是一种结构型设计模式,其核心目的是通过提供一个适配器类来使得原本接口不兼容的类可以一起工作。它通过将一个类的接口转换成客户端所期望的接口,使得原本因接口不兼容而无法一起工作的类可…...
Logo设计免费生成器:轻松设计个性化标志
在当今这个信息爆炸的时代,一个好的Logo标志已经成为品牌和企业的名片。它不仅是品牌的象征,也是企业文化和价值观的体现。然而,很多初创企业或小型团队往往因为预算有限,无法请专业的设计师来打造专属的Logo。这时候,…...
智能停车场车牌识别计费系统
作者简介:Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验,被多个学校常年聘为校外企业导师,指导学生毕业设计并参与学生毕业答辩指导,…...
谷歌开通第三方平台OAuth登录及Java对接步骤
调研起因: 当然还是因为手头的海外项目,用户注册通常要用邮箱,正常流程需要给用户邮箱发送验证码,再让用户输入密码进行注册。 为了简化流程,让用户使用谷歌邮箱一键完成注册或登录, 我们直接获取谷歌邮箱、…...
人体:精妙绝伦的生命之躯
人体:精妙绝伦的生命之躯 在浩瀚宇宙中,人体犹如一颗璀璨的明珠,是自然界最伟大的杰作之一。它是一个高度复杂且精妙绝伦的有机系统,承载着生命的奥秘与奇迹,展现出令人惊叹的适应性、协调性和自我修复能力。从微观的…...
python的urllib模块和http模块
1.python的urllib库用于操作网页,并对网页内容进行处理 urllib包有如下模块: urllib.request:打开和读取URL urllib.error: 包含urllib.request抛出的异常 urllib.parse: 解析URL urllib.robotparser࿱…...
Java [后端] 开发日常记录(1)
目录 1、常用的注解 2、对字符串的处理 3、对JSON串的处理 -- The End -- 详细如下: 1、常用的注解 若返回的字段中有NUll,则不返回 JsonInclude(value JsonInclude.Include.NON_NULL) //在实体类中添加这个注解 JsonInclude(JsonInclude.Include.NON…...
jetbrain 安装 copilot
问题一:Sign in failed. Reason: Request signInInitiate failed with message: Request to /github.com/login/device/code> timed out after 30000ms, request id: 11, error code: -32603 解决方案: 参考资料:https://github.com/orgs/…...
万里数据库GreatSQL监控解析
GreatSQL是MySQL的一个分支,专注于提升MGR(MySQL Group Replication)的可靠性及性能。乐维监控平台可以有效地监控GreatSQL,帮助用户及时发现并解决潜在的性能问题。 通过在GreatSQL服务器上安装监控代理,收集数据库性…...
OpenCV-Python实战(9)——滤波降噪
一、均值滤波器 cv2.blur() img cv2.blur(src*,ksize*,anchor*,borderType*)img:目标图像。 src:原始图像。 ksize:滤波核大小,(width,height)。 anchor:滤波核锚点,…...
Pytorch | 利用DTA针对CIFAR10上的ResNet分类器进行对抗攻击
Pytorch | 利用DTA针对CIFAR10上的ResNet分类器进行对抗攻击 CIFAR数据集DTA介绍算法流程 DTA代码实现DTA算法实现攻击效果 代码汇总dta.pytrain.pyadvtest.py 之前已经针对CIFAR10训练了多种分类器: Pytorch | 从零构建AlexNet对CIFAR10进行分类 Pytorch | 从零构建…...
Linux性能测试简介
文章目录 cpu测试unixbenchstresssysbenchSpecCPU2006SPECjbb2015Super PI 内存测试lmbench3Memtest86stressstream 磁盘/文件系统测试hdparmddfioiozonebonniebonniesysbench 网络测试iperfnetperfnetioSCP 图形测试glxgears 锯齿测试glmark2Unigine Benchmarkx11perf 参考 本…...
Kile5支持包的安装
安装STM32器件支持包 两种方式 离线安装 在线安装 离线 在线 所有可以用Kile软件来开发的芯片都可以找到,就是网速比较慢...
【Ubuntu 系统 之 开启远程桌面SSH登录】
【Ubuntu 系统 之 开启远程桌面&SSH登录】 一、开启 SSH 登录二、开启远程桌面1、更新包管理器并安装 xrdp1.1、遇到错误1.2、解决方法 2、安装桌面环境(如果服务器上没有 GUI)3、配置 xrdp 使用默认的 GNOME 桌面环境4、配置防火墙允许远程桌面连接…...
MySQL 索引分类及区别与特点
MySQL 索引分类及区别与特点 索引是数据库中用于加速数据检索的数据结构。MySQL 支持多种类型的索引,每种索引有其特定的使用场景和特点。以下是 MySQL 中常见的索引分类及其区别与特点: 1. 按数据结构分类 (1) BTree 索引 特点: 默认的索…...
Win11安全中心总弹警告?手把手教你揪出并删除那个‘捣乱’的内存完整性不兼容驱动
Win11安全中心频繁弹窗?三步精准定位并清除内存完整性冲突驱动 每次开机右下角那个黄色三角警告图标是不是让你血压飙升?Windows安全中心反复提醒"内存完整性已关闭",点开一看又提示"驱动程序不兼容"。这种系统级的警告就…...
中控SCADA的VBS脚本玩不转了?试试用Python来“降维打击”,搞定复杂数据处理与模型调用
中控SCADA的VBS脚本玩不转了?试试用Python来“降维打击”,搞定复杂数据处理与模型调用 在工业自动化领域,中控SCADA系统长期扮演着数据采集与监控的核心角色。然而,当项目需求从简单的数据记录升级到需要复杂分析、预测性维护或实…...
Cat-Catch:浏览器资源嗅探的终极解决方案与实用指南
Cat-Catch:浏览器资源嗅探的终极解决方案与实用指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 在当今数字内容爆炸的时代…...
金融公共服务机构钓鱼邮件威胁治理研究 —— 以 NSI 安全事件为例
摘要 英国国家储蓄与投资机构 NS&I 近三年拦截各类恶意邮件 132,126 封,其中垃圾邮件 97,777 封,钓鱼攻击从 1,043 起激增至 4,414 起,呈现总量下降但精准化、AI 化、高危害性显著上升的趋势。作为管理海量公众资金与敏感数据的金融公共服…...
远洋边缘计算实战:基于 Linux 的客滚船高并发网络 QoS 调度与隔离策略
摘要:客滚船直连卫星网络面对几百名旅客并发时存在瘫痪与越权风险。本文记录了基于 Linux 构建标准工业级边缘网关多链路 QoS 调度与隔离的实操复盘。导语:在主导一艘国际客滚船的网络重构项目时,我们面临一个典型的高并发调度与合规挑战&…...
别再点那个小箭头了!手把手教你用自定义按钮控制ElementUI表格展开行(Vue3 + Element Plus版)
用文字按钮重构Element Plus表格交互:让展开行操作更符合用户直觉 后台管理系统中最常见的交互痛点之一,就是默认的表格展开箭头设计。当用户面对密密麻麻的数据表格时,那个小小的三角形图标往往成为操作盲区。我曾参与过一个电商后台系统的用…...
Taotoken助力边缘计算场景下的智能应用开发与模型调用
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken助力边缘计算场景下的智能应用开发与模型调用 在工业控制、物联网网关或移动机器人等边缘计算场景中,开发者常…...
告别JNI内存泄漏:实战中那些容易踩坑的字符串与数组操作(附完整代码示例)
告别JNI内存泄漏:实战中那些容易踩坑的字符串与数组操作(附完整代码示例) 在Android NDK开发和高性能Java服务中,JNI(Java Native Interface)作为连接Java与C的桥梁,其重要性不言而喻。然而&…...
关键字[Static]
一、static 的三种用法 1. 静态局部变量 * 特性: * - 只初始化一次(程序启动时) * - 函数返回后值保留(不销毁) * - 下次调用时保持上次的值 * - 存储在静态区,不在栈上 2. 静态全局变量(文件作用域限制) 仅在 xx.c 内可见,其他文件无法访问 3. 静态函数(文件作用域限…...
几十人团队跨部门共享大文件难?企业网盘选型必须知道的 3 个标准(含 5 款网盘实测)
企业 IT 和财务在做工具选型时,常常把网盘的“投资回报率(ROI)”简单等同于“多少钱买多少 GB 的存储空间”。但对于一个几十人的活跃团队来说,每天跨部门大文件传输引发的网络拥堵、向外部客户分享资料时的漫长等待与沟通摩擦&am…...
