当前位置: 首页 > news >正文

解决 MySQL 连接数过多导致的 SQLNonTransientConnectionException 问题

这里写目录标题

  • 解决 MySQL 连接数过多导致的 SQLNonTransientConnectionException 问题
    • 1. 概述
    • 2. 问题描述
      • 异常日志的关键部分:
    • 3. 原因分析
      • 3.1. MySQL 连接数配置
      • 3.2. 连接池配置问题
      • 3.3. 代码中未正确关闭连接
      • 3.4. 高并发导致连接需求激增
    • 4. 解决方案
      • 4.1. 增加 MySQL 最大连接数
      • 4.2. 优化连接池配置
      • 4.3. 确保数据库连接的正确关闭
      • 4.4. 使用连接池监控工具
      • 4.5. 使用数据库连接复用和优化查询
      • 4.6. 使用数据库连接池超时处理
    • 5. 结论
      • 参考文献

解决 MySQL 连接数过多导致的 SQLNonTransientConnectionException 问题

1. 概述

在开发过程中,特别是高并发应用程序中,常会遇到数据库连接数超限的问题。这种情况通常会导致应用程序抛出类似于 java.sql.SQLNonTransientConnectionException: Data source rejected establishment of connection, message from server: "Too many connections" 的异常。

本文将深入分析该问题的原因,并提供有效的解决方案,帮助开发者避免或解决连接数过多问题。

2. 问题描述

从错误日志中可以看到,java.sql.SQLNonTransientConnectionException 异常提示 数据源拒绝了连接的建立,原因是“Too many connections”。此错误通常表明 MySQL 服务器的连接数达到了最大限制,导致新的连接请求无法建立。

异常日志的关键部分:

Caused by: java.sql.SQLNonTransientConnectionException: Data source rejected establishment of connection,  message from server: "Too many connections"

这意味着 MySQL 数据库在当前时刻已经达到了最大连接数上限,无法再接受新的连接请求。

3. 原因分析

3.1. MySQL 连接数配置

MySQL 服务器为了防止资源耗尽,会通过 max_connections 参数来限制同时连接到数据库的最大客户端数量。当客户端连接数超过该限制时,新的连接请求会被拒绝,从而抛出 “Too many connections” 的异常。

我们可以通过以下 SQL 语句检查 MySQL 服务器的当前最大连接数配置:

SHOW VARIABLES LIKE 'max_connections';

默认情况下,MySQL 的最大连接数通常为 151。具体值可能根据你的 MySQL 服务器配置而不同。

3.2. 连接池配置问题

大多数 Java 应用程序使用连接池来管理与数据库的连接,例如 HikariCP 或 DBCP。如果连接池配置不当(例如允许的最大连接数过多或池没有及时释放闲置连接),会导致大量无效的数据库连接占用 MySQL 资源,进一步加剧连接数超限的问题。

3.3. 代码中未正确关闭连接

在代码中使用数据库连接后,如果未能及时关闭数据库连接,连接池可能会因大量闲置连接而无法回收资源,导致新的连接无法创建。

3.4. 高并发导致连接需求激增

如果应用程序并发量大,多个线程同时访问数据库时,也容易导致短时间内大量连接请求堆积,超出数据库的最大连接数限制。

4. 解决方案

4.1. 增加 MySQL 最大连接数

首先,可以增加 MySQL 的最大连接数配置,允许更多客户端同时连接:

  1. 使用以下 SQL 命令查看当前的 max_connections 值:

    SHOW VARIABLES LIKE 'max_connections';
    
  2. 通过以下命令修改 max_connections 的值(例如增加到 500):

    SET GLOBAL max_connections = 500;
    

    注意:这个修改是临时的,重启 MySQL 服务器后会恢复默认值。要永久修改,需要在 MySQL 配置文件(my.cnfmy.ini)中设置:

    [mysqld]
    max_connections = 500
    
  3. 重启 MySQL 服务使更改生效。

4.2. 优化连接池配置

适当配置数据库连接池,可以有效管理连接的创建和释放,防止过多连接占用资源。以 HikariCP 为例:

spring:datasource:hikari:minimum-idle: 10              # 保持的最小空闲连接数maximum-pool-size: 50         # 允许的最大连接数,建议值小于 max_connectionsidle-timeout: 60000           # 空闲连接超过此时间后将被释放connection-timeout: 30000     # 连接超时时间,超过此时间将抛出异常max-lifetime: 1800000         # 连接的最大存活时间

4.3. 确保数据库连接的正确关闭

在应用代码中,确保每次使用完数据库连接后都能够正确关闭连接。常见的做法是使用 try-with-resources 语法,确保连接使用完后自动关闭:

try (Connection connection = dataSource.getConnection()) {// 执行数据库操作
} catch (SQLException e) {e.printStackTrace();
}

这种方式可以确保无论操作是否抛出异常,连接都能够在最后正确关闭。

4.4. 使用连接池监控工具

监控连接池的使用情况,检查是否存在连接泄漏或者过度使用的问题。HikariCP 提供了连接池的统计信息,可以帮助你识别瓶颈和异常:

spring:datasource:hikari:metricsTrackerFactory: Prometheus

这种配置可以结合 Prometheus 和 Grafana 进行可视化监控,及时发现连接池的潜在问题。

4.5. 使用数据库连接复用和优化查询

  • 减少数据库连接的创建和销毁:尽量复用已有的数据库连接,避免频繁创建新连接。
  • 优化查询:减少不必要的数据库查询和更新操作,减轻数据库压力。

4.6. 使用数据库连接池超时处理

增加连接的超时配置,避免长时间空闲连接占用数据库资源。你可以通过 idle-timeout 设置连接的最大空闲时间,超过该时间后连接将被关闭。

5. 结论

Too many connections 问题在 MySQL 数据库的高并发应用中是比较常见的。通过合理配置 MySQL 的最大连接数、优化连接池的配置以及确保代码中正确关闭连接,可以有效避免该问题的发生。

解决这类问题的关键是合理使用连接池和资源管理,并确保应用程序在高并发场景下具有良好的伸缩性和资源回收机制。

参考文献

  • MySQL 官方文档
  • HikariCP 官方文档

希望这篇文档能够帮助大家在实际项目中更好地解决数据库连接过多的问题,保障系统的稳定性与高效性。

相关文章:

解决 MySQL 连接数过多导致的 SQLNonTransientConnectionException 问题

这里写目录标题 解决 MySQL 连接数过多导致的 SQLNonTransientConnectionException 问题1. 概述2. 问题描述异常日志的关键部分: 3. 原因分析3.1. MySQL 连接数配置3.2. 连接池配置问题3.3. 代码中未正确关闭连接3.4. 高并发导致连接需求激增 4. 解决方案4.1. 增加 …...

猫头虎分享:什么是 ChatGPT 4o Canvas?

猫头虎是谁? 大家好,我是 猫头虎,猫头虎技术团队创始人,也被大家称为猫哥。我目前是COC北京城市开发者社区主理人、COC西安城市开发者社区主理人,以及云原生开发者社区主理人,在多个技术领域如云原生、前端…...

qiankun 主项目和子项目都是 vue2,部署在同一台服务器上,nginx 配置

1、主项目配置 1.1 micro.vue 组件 <template><div id"container-sub-app"></div> </template><script> import { loadMicroApp } from qiankun; import actions from /utils/actions.js;export default {name: microApp,mixins: [ac…...

深入浅出MongoDB(七)

深入浅出MongoDB&#xff08;七&#xff09; 文章目录 深入浅出MongoDB&#xff08;七&#xff09;查询优化创建索引以支持读取操作查询选择性覆盖查询 分析性能使用数据库分析器评估对数据库的操作使用db.currentOp()评估mongod操作使用explain评估查询性能 优化查询性能创建索…...

【华为】配置NAT访问互联网

1.AR1&#xff1a; int g0/0/0 ip ad 64.1.1.2 255.255.255.0 int g0/0/1 ip ad 110.242.68.1 255.255.255.02.AR2: (1)配置端口ip: int g0/0/1 ip ad 10.3.1.2 255.255.255.0 int g0/0/0 ip ad 64.1.1.1 255.255.255.0(2)配置默认路由&#xff1a; ip route-static 0.0.0.0 0.…...

Spring Boot项目使用多线程执行定时任务

我在一个Spring Boot项目中&#xff0c;采用定时器执行一些操作&#xff0c;比如10秒就发送一次数据。这些操作有2个&#xff0c;如下所示。我就想&#xff0c;虽然这两个操作各自指定了时间频率&#xff0c;但如果其中一个操作非常耗时&#xff0c;会不会影响其他操作呢&#…...

【安装JDK和Android SDK】

安装JDK和Android SDK 1 前言2 下载2.1 下载途径2.2 JDK下载和安装2.2.1 下载2.2.2 安装并配置环境变量2.2.3 验证 2.3 SDK下载和安装2.3.1 下载2.3.2 安装2.3.3 环境变量配置2.3.4 验证 1 前言 在软件开发中&#xff0c;Android应用开发通常使用Android Studio&#xff0c;但…...

汇总10个AI免费一键生成PPT的网站

一、前言 PPT幻灯片是现代办公和学习中的重要组成部分。它在工作、研究或培训中扮演着重要角色&#xff0c;并能够让观众更好地理解信息。随着当今人工智能技术的快速发展&#xff0c;现在有很多免费的AI PPT生成器可供选择&#xff0c;帮助用户更加便捷地制作出高效且具有较强…...

超材料光子晶体和禁带分析实例_CST电磁仿真教程

光子晶体是由周期性排列的不同折射率的介质制造的光学结构&#xff0c;可被视为广义超材料metamaterial的一种。本期我们演示设计一个基于光频能带(PBG,photonics band gap) 的二维光子晶体波导&#xff0c;能带分析方法也可适用于微波波段&#xff08;EBG,electromagetic band…...

关于OceanBase数据库的poc测试连接经验(by liuhui)

poc客户给了OceanBase数据库实例如下 ob实例&#xff1a; ip:1xx.xx.xx 端口&#xff1a;2883 实例名&#xff1a;obm_xczjj_1_poc#cs_pool_1 用户名&#xff1a;root 密码&#xff1a;xxxxxx 问题出现&#xff1a;根据客户提供的OceanBase数据库配置报错。配置如下 查询数据…...

Docker部署如何修改本地mysql,redis连接信息

要修改数据库 MySQL 和缓存 Redis 的地址为 ruoyi-mysql 和 ruoyi-redis&#xff0c;通常需要在 Spring Boot 项目的配置文件中进行相应的修改。 ### 修改 MySQL 数据库地址为 ruoyi-mysql 1. **在 Spring Boot 项目中找到 application.properties 或 application.yml 文件**…...

PHP中的ReflectionClass常见用法

ReflectionClass是 PHP 中的一个类&#xff0c;它提供了有关类的信息的反射。 使用ReflectionClass可以在运行时获取关于类的各种信息&#xff0c;例如类的名称、方法、属性、注释等。 以下是一些常见的用法&#xff1a; 获取类的名称&#xff1a; $reflection new Reflec…...

processing像素画教程

前提&#xff1a;各位已经安装了processing 第一步&#xff1a;创建一个简单的网格 我们首先创建一个网格来定义我们作品的像素画布。网格将帮助您在适当的位置绘制每个像素。 int gridSize 20; // 每个像素的大小 int cols, rows; void setup() {size(400, 400); // 设置画…...

【秋招笔试】10.13字节跳动(已改编)秋招-三语言题解

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 大厂实习经历 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 本次的三题全部上线…...

牛客网上最全的Java八股文整理,涵盖Java全栈技术点

Java 面试 “金九银十”这个字眼对于程序员应该是再熟悉不过的了&#xff0c;每年的金九银十都会有很多程序员找工作、跳槽等一系列的安排。说实话&#xff0c;面试中 7 分靠能力&#xff0c;3 分靠技能&#xff1b;在刚开始的时候介绍项目都是技能中的重中之重&#xff0c;它…...

Skyeye 云智能制造 v3.14.9 发布,ERP 商城 + AI

Skyeye 云智能制造&#xff0c;采用 Springboot winUI 的低代码平台、移动端采用 UNI-APP。包含 30 多个应用模块、50 多种电子流程&#xff0c;CRM、PM、ERP、MES、ADM、EHR、笔记、知识库、项目、门店、商城、财务、多班次考勤、薪资、招聘、云售后、论坛、公告、问卷、报表…...

Element-快速入门

什么是 Element 在现代前端开发中&#xff0c;组件化的思想日益盛行&#xff0c;Element组件库作为一款流行的UI组件库&#xff0c;特别适用于基于Vue.js的项目&#xff0c;它为开发者提供了丰富的组件和良好的开发体验。 想要使用Element的组件库&#xff0c;我们需要完成下面…...

利士策分享,从“亮剑精神”汲取财富智慧

利士策分享&#xff0c;从“亮剑精神”汲取财富智慧 在某一广袤区域内&#xff0c;一场寓意深远的活动正如火如荼地展开&#xff0c;它不仅象征着直面挑战的勇气&#xff0c;更隐含着经济社会发展的深层启示。 对于广大民众来说&#xff0c;这场活动背后所传达的理念与机遇&am…...

【JavaScript】关于使用JS对word文档实现预览的一些思考

文章目录 mammothdocx4js mammoth 官网地址&#xff1a;https://github.com/mwilliamson/mammoth.js#readme 安装mammoth&#xff1a; npm i mammoth -S我们可以安装mammoth来实现上传的word文件的在线预览&#xff0c;我们以element的上传组件为示例&#xff1a; <temp…...

安宝特方案 | AR技术在轨交行业的应用优势

随着轨道交通行业不断向智能化和数字化转型&#xff0c;传统巡检方式的局限性日益凸显。而安宝特AR眼镜以其独特的佩戴方式和轻便设计&#xff0c;为轨道交通巡检领域注入了创新活力&#xff0c;提供了全新的解决方案。 01 多样化佩戴方法&#xff0c;完美适应户外环境 安宝特…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

视觉slam十四讲实践部分记录——ch2、ch3

ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

接口自动化测试:HttpRunner基础

相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具&#xff0c;支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议&#xff0c;涵盖接口测试、性能测试、数字体验监测等测试类型…...

手机平板能效生态设计指令EU 2023/1670标准解读

手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读&#xff0c;综合法规核心要求、最新修正及企业合规要点&#xff1a; 一、法规背景与目标 生效与强制时间 发布于2023年8月31日&#xff08;OJ公报&…...