当前位置: 首页 > 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;完美适应户外环境 安宝特…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;一个对象的状态变化需要自动通知其他对象&#xff0c;比如&#xff1a; 电商平台中&#xff0c;商品库存变化时需要通知所有订阅该商品的用户&#xff1b;新闻网站中&#xff0…...

Linux 中如何提取压缩文件 ?

Linux 是一种流行的开源操作系统&#xff0c;它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间&#xff0c;使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的&#xff0c;要在 …...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

华为OD机试-最短木板长度-二分法(A卷,100分)

此题是一个最大化最小值的典型例题&#xff0c; 因为搜索范围是有界的&#xff0c;上界最大木板长度补充的全部木料长度&#xff0c;下界最小木板长度&#xff1b; 即left0,right10^6; 我们可以设置一个候选值x(mid)&#xff0c;将木板的长度全部都补充到x&#xff0c;如果成功…...

9-Oracle 23 ai Vector Search 特性 知识准备

很多小伙伴是不是参加了 免费认证课程&#xff08;限时至2025/5/15&#xff09; Oracle AI Vector Search 1Z0-184-25考试&#xff0c;都顺利拿到certified了没。 各行各业的AI 大模型的到来&#xff0c;传统的数据库中的SQL还能不能打&#xff0c;结构化和非结构的话数据如何和…...

云原生安全实战:API网关Envoy的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关 作为微服务架构的统一入口&#xff0c;负责路由转发、安全控制、流量管理等核心功能。 2. Envoy 由Lyft开源的高性能云原生…...

2025.6.9总结(利与弊)

凡事都有两面性。在大厂上班也不例外。今天找开发定位问题&#xff0c;从一个接口人不断溯源到另一个 接口人。有时候&#xff0c;不知道是谁的责任填。将工作内容分的很细&#xff0c;每个人负责其中的一小块。我清楚的意识到&#xff0c;自己就是个可以随时替换的螺丝钉&…...