数据库空闲连接超过最大wai_timemout时间,数据库会强行断开空闲的链接,dbcp解决方案

2023-11-01

虚拟空间的mysql数据库常设得很低,如wait_timeout=100,在java web 应用中使用dbcp做为连接池,当数据库重启或数据库连接超过设置的最大timemout时间,数据库会强行断开已有的链接,此时当web程序访问数据库时就会出现错误,大致的错误信息java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost,原因是数据库这边已有的连接强行断开,而连接池中不知道已经断开,还是从连接池取出数据库连接交给程序去执行数据库操作,所以导致出错。且我们无法修改配置,这时只能在dbcp连接池上做一些配置。

解决原理:

在构造GenericObjectPool [BasicDataSource在其createDataSource () 方法中也会使用GenericObjectPool]时,会生成一个内嵌类Evictor,实现自Runnable接口。如果timeBetweenEvictionRunsMillis大于0,每过 timeBetweenEvictionRunsMillis毫秒Evictor会调用evict()方法,检查连接池中的连接的闲置时间是否大于 minEvictableIdleTimeMillis毫秒(_minEvictableIdleTimeMillis小于等于0时则忽略,默认为30分钟),是则销毁此对象, 然后调用ensureMinIdle方法检查确保池中对象个数不小于_minIdle 如果连接池的连接数小于最小空闲连接数,则创建数据库连接, 同时检查连接池的连接是否小于maxIdle,是则把刚创建的连接放入连接池中,否则销毁此对象。
参数说明
timeBetweenEvictionRunsMillis (设置的Evict线程的时间,单位:毫秒,即每隔多少时间去检测一次空闲连接是否超时,默认值为-1,即不开启)
minEvictableIdleTimeMillis (空闲逐出 连接池的时间,单位:毫秒,默认30分钟)
numTestsPerEvictionRun (设定在进行后台对象清理时,每次检查几个链接。默认值是3.
如果numTestsPerEvictionRun>=0, 则取numTestsPerEvictionRun 和池内的链接数 的较小值 作为每次检测的链接数
如果numTestsPerEvictionRun<0,则每次检查的链接数是检查时池内链接的总数乘以这个值的负倒数再向上取整的结果。)
举例:
              XX系统的数据库Mysql,dba设置的超时空闲失效时间是100秒(MYSQL如果不设置,默认的是8小时),未加以下参数之前经常报链接失效的错误,加上以下配置后,即可解决。timeBetweenEvictionRunsMillis=48  minEvictableIdleTimeMillis=90,因此当空闲连接在96秒的时候会被检查到超过90秒随后被逐出,然后则创建新的数据库连接。因此timeBetweenEvictionRunsMillis一定要小于100秒,否则检查不出失效连接,但这里也不能设置为51秒,因为第二次检测已经102秒,连接池连接在100秒时就已经与数据库断开!minEvictableIdleTimeMillis要小于100秒,即赶在失效前逐出。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据库空闲连接超过最大wai_timemout时间,数据库会强行断开空闲的链接,dbcp解决方案 的相关文章

  • 如何从shell脚本自动登录MySQL?

    我有一个 MySQL 服务器 其中有一个用户和密码 我想在 shell 脚本中执行一些 SQL 查询而不指定密码 如下所示 config sh MYSQL ROOT root MYSQL PASS password mysql sh sou
  • 我可以使用 HSQLDB 进行 junit 测试克隆 mySQL 数据库吗

    我正在开发一个 spring webflow 项目 我想我可以使用 HSQLDB 而不是 mysql 进行 junit 测试吗 如何将我的 mysql 数据库克隆到 HSQLDB 如果您使用 spring 3 1 或更高版本 您可以使用 s
  • SQL不允许表中有重复记录

    如何使其不添加重复项 我想让它通过 ID 之外的所有其他列进行检查 我希望这个无效 ID col1 col2 col3 1 first middle last ID col1 col2 col3 2 first middle last 我希
  • Mysql 时间匹配连接

    我有两个表cpuinfo和jobinfo 我想使用这两种数据创建报告 tabes CREATE TABLE cpuinfo id int 11 NOT NULL AUTO INCREMENT usagetime datetime DEFAU
  • 海量记录的bulk_create最佳实践

    I use bulk create将 1 mio 记录插入到新表中 需要 80 秒 Django 只使用一个 CPU 核心 大约 25 CPU 但没有一个核心达到 100 我相信有改进的潜力 这是代码 class Stock models
  • 如何在mysql中选择具有相同值集的列?

    我的桌子是 patients pid name city disease did dname has disease did pid 我想列出具有相同疾病组的患者 pid 和 did 分别是患者和疾病表中的主键 并且是 has diseas
  • MySQL - 从临时表插入

    这看起来非常简单 但我坚持使用简单的插入语句 见下文 begin work CREATE TEMPORARY TABLE IF NOT EXISTS insert table AS select r resource id fr file
  • PHP PDO 使用 bindParam 第一个参数(不带冒号)[重复]

    这个问题在这里已经有答案了 请检查这个 user id int GET user id sql DELETE FROM users WHERE user id user id query db gt prepare sql query gt
  • PHP 和 MySQL - 高效处理多个一对多关系

    我正在寻求一些有关使用 MySQL 和 PHP 检索和显示数据的最佳方法的建议 我有 3 个表 所有一对多关系如下 Each SCHEDULE有很多覆盖每个覆盖都有很多地点 我想检索这些数据 以便它可以全部显示在单个 PHP 页面上 例如列
  • 如果 Row1 = 值 1,则更新其他行

    我有一个小的 php 脚本 用于访问 mySql 数据库 我想在数据库中插入新记录之前查看该数字 值 1 是否等于数据库中的记录 这也在第 1 行 所以我想 查看传入的电话号码是否等于数据库中的电话号码 如果是这样 则必须保持电话号码相同的
  • 如何在 MySQL 中测试 Select for Update

    我正在表演SELECT FOR UPDATE或 InnoDB 表的行级锁定 我的目的是只有一个请求可以读取同一行 因此 如果两个用户同时请求相同的数据 其中只有一个人获取数据 即第一个触发查询的人 但是我如何测试锁定是否已放置 因为我正在通
  • 让登录更安全

    我已使用此代码进行管理员登录 仅当用户输入正确的用户名和密码时才应打开loginhome php 但后来我意识到这根本不安全 任何人都可以直接访问 mywebsite loginhome php 而无需登录 注销后 可以使用后退按钮打开 l
  • 如何在MYSQL中将整个字符串小写并保持第一个大写[重复]

    这个问题在这里已经有答案了 我的表栏目 我预期的输出会在列中发生变化 Smith Allen Doyle Dennis Baker Waker 这是我尝试过的 但不起作用 UPDATE TABLE employee SET last nam
  • 将庞大数据库从亚马逊RDS导出到本地mysql

    我在 Amazon RDS 上有一个 mysql 数据库 大约 600GB 数据 我需要将其移回本地专用服务器 但我不知道从哪里开始 每次我尝试初始化 sqldump 时它都会冻结 有没有办法将其移至 S3 甚至可能在开始下载之前将其分成更
  • Mysql用in语句限制

    我正在写一个查询 SELECT user bookmarks id as user bookmark id bookmark id user bookmarks user id bookmark url bookmark website b
  • MySQL 与日语字符

    我试图弄清楚如何创建一个表 以便我可以在其中插入日语名字 现在我有 Type InnoDB Encoding UTF 8 Unicode utf8 Collation utf8 general ci 但是 当我插入字符时 它显示为 当我使用
  • SQL查询查找表的主键?

    我怎样才能找到哪一列首要的关键使用查询来创建表 这是重复的question https stackoverflow com questions 893874 mysql determine tables primary key dynami
  • MySQL 追加字符串

    How can I append a string to the end of an existing table value Let s say I have the table below And let s say that Mari
  • PHP 与 MySQL 查询性能( if 、 函数 )

    我只看到这个artice http www onextrapixel com 2010 06 23 mysql has functions part 5 php vs mysql performance 我需要知道在这种情况下什么是最好的表
  • 内部 while 循环不工作

    这是我项目网页上的代码片段 这里我想显示用户选择的类别 然后想显示属于该类别的主题 在那里 用户可以拥有多个类别 这没有问题 我可以在第一个 while 循环中打印所有这些类别 问题是当我尝试打印主题时 结果只显示一行 但每个类别中有更多主

随机推荐

  • Gitlab 报错:Error 500 with /api/v4/projects: NoMethodError: undefined method `string_access_level‘

    新安装的gitlab1 14 1版本在调用查询所project的api时 会报如下错误 NoMethodError undefined method string access level for nil NilClass api enti
  • VC文件目录选择对话框(任意目录)

    程序运行界面显示如下 使用目录选择对话框时 如何让其弹出后自动打开指定目录 是的当用目录选择对话框时 用如下的结构打开 以下是代码片段 typedef struct browseinfo HWND hwndOwner LPCITEMIDLI
  • 区块链技术在医疗数据共享中的应用

    随着医疗信息化技术的日益发展 医疗数据的存储和管理变得更加重要 传统的数据存储方法面临着信息泄露 数据篡改等安全隐患 为了解决这些问题 人们开始探索将区块链技术应用于医疗数据共享 以提高数据安全性和可靠性 本文将探讨区块链技术在医疗数据共享
  • 简述SD卡的工作原理(四)

    简述SD卡的工作原理 功能 SD卡是存储卡 它的功能就是存储 分类 SD卡按容量分类 可以分为3类 SD卡 SDHC卡 SDXC卡 如下 容量 命名 简称 0 2G Standard Capacity SD Memory Card SDSC
  • ubuntu顶部的任务栏-标题栏-菜单栏-启动器消失不见7个解决办法

    因为开发环境的Ubuntu服务器不敢随便折腾 所以就在自己机器装了一个 折腾来折腾去 不知道哪个环节安装 卸载出了问题 也可能是改了什么配置我没注意到 进入桌面后找不到启动器 菜单栏和标题栏了 终端可以打开 也能通过终端运行程序 有两次是重
  • 关于WiFi和信号图标出现感叹号消除办法

    谷歌原生安卓系统当连接到移动数据网络或者WIFI网络的时候 其NetworkMonitor模块会向特定的服务器发起一个http的请求并利用收到的响应进行网络状态判断 由于谷歌的服务器被天朝屏蔽 所以导致没有返回值 这个时候谷歌安卓系统就会在
  • linux权限管理

    权限管理 文件的权限针对三类对象进行定义 user属主 缩写u group属组 缩写g other其他 缩写o 1 文件的一般权限 1 r w x的作用及含义 权限 对文件影响 对目录影响 r read 读 可以读取文件内容 可以列出目录的
  • 微信小程序导出zip、excel、word、png到手机

    1 需要使用的方法 wx request 发请求调用接口 wx showModal 打开弹框进行展示 wx setClipboardData 复制文本的数据 wx downloadFile 文件下载的方法 wx getFileSystemM
  • 互联网摸鱼日报(2023-02-26)

    互联网摸鱼日报 2023 02 26 InfoQ 热门话题 迁移工具 Air2phin 宣布开源 2 步迁移 Airflow 至 Dolphinscheduler 专访奇安信董国伟博士 目前开源安全的现状并不乐观 但其重要性已成各方共识 专
  • golang 分布式框架Origin学习笔记

    最近项目的后端需求是全球同服的 在使用语言方面确定了为golang之后 了解了一下当前的一些goalng游戏服务器框架 终于在leaf pitaya 等众多框架中选择了 Origin 主要是因为它是分布式框架 微服务架构 比较匹配做全球同服
  • curl: (3) [globbing] error: bad range specification after pos 150的解决方法

    在线上服务器上执行下面的命令 curl vo dev null http 120 52 72 46 80 fileshare3010 dfiles eu c3pr90ntcsf0 auth 1375626538db3c073c81647e8
  • 拨号软件隐藏手机号码_华为手机的拨号键有大用处,不仅能用来打电话,还有4个隐藏功能...

    手机最本质的作用就是用来与别人进行通话 所以每一部手机都拥有拨号按键 但你知道吗 华为手机的拨号按键除了能够进行拨打电话以外 还隐藏着5个功能 那么是哪些隐藏的功能呢 笔者就来为大家讲解下吧 手机的入网串码 很多人都不知道如何查找手机的入网
  • 猿如意|手把手教你下载、安装和配置PyCharm社区版

    手把手教你使用猿如意下载 安装和配置PyCharm社区版 希望能帮助到有需要的童鞋 文章目录 前言 一 下载安装猿如意 二 安装PyCharm社区版 1 通过猿如意找到PyCharm下载位置 2 安装PyCharm 三 对PyCharm社区
  • idea调试如何回退到上个断点

    我们使用idea运行java代码时 打了几个断点 想看参数 但是一不小心 手一抖 就过去了 此时如何回退到上一步呢 看图说话 如下 我有两个方法 分别有两个断点 1 此时我们的断点已经到getTest方法了 如何回到上一个method方法中
  • 我要进大厂第二讲:如何准备好一场大厂面试

    我要进大厂第二讲 如何准备好一场大厂面试 本文是我要进大厂第二讲 如何准备好一场大厂面试 4年经验 我有个同事跟我说过 他曾经的老大告诉他们 无论是否跳槽 每年都应该出去面试一下 我个人对这个想法持支持态度 至少在我们还年轻的时候应该尽量这
  • 求数组最小值和最小值的下标

    描述 定义一个含10个元素的整型数组 从键盘输入数组所有元素的值 并求该数组中的最小值和最小值的下标 如果最小值在数组中出现多次 输出最小的那个下标 输入 10个整数 输出 最小值和最小值的下标 如果最小值在数组中出现多次 输出最小的那个下
  • (U+FF1A)

    Package inputenc Error Unicode character U FF1A 错误原因 冒号 是中文格式
  • anaconda的envs的其中一个环境目录下,没有python.exe文件,只有conda-meta和scripts

    进入Anaconda软件中 删除该环境 左下角create重新创建环境 系统就会重新配置python等相关文件
  • 19-jQuery快速开发②

    jQuery快速开发 1 jQuery 属性操作 1 1 元素固有属性值 prop 1 2 元素自定义属性值 attr 1 3 数据缓存 data 1 4 案例 购物车案例模块 全选 2 jQuery 文本属性值 2 1 jQuery内容文
  • 数据库空闲连接超过最大wai_timemout时间,数据库会强行断开空闲的链接,dbcp解决方案

    虚拟空间的mysql数据库常设得很低 如wait timeout 100 在java web 应用中使用dbcp做为连接池 当数据库重启或数据库连接超过设置的最大timemout时间 数据库会强行断开已有的链接 此时当web程序访问数据库时