38 案例实战:数据库无法连接故障的定位,Too many connections

数据库连接数从15000降到100的实战治理方法 数据库连接是典型有限资源,其生命周期管理直接决定系统稳定性与可观测性。本质原理在于:连接并非简单‘打开-关闭’,而需在事务边界、线程上下文、异步执行流和基础设施超时策略中全程受控。技术价值体现在降低MySQL连接竞争、减少GC压力、提升P99延迟确定性,并支撑高可用发布与故障快速定位。典型应用场景包括微服务间高频调用、定时任务异步处理、响应式编程集成及云环境ALB/DB超时错配等。本文基于DigitalOcean真实生产案例,深入解析连接泄漏根因、全链路测绘、声明式生命周期重构与动态池参数调优四大核心实践。 阅读详情

今天要给大家分析另外一个真实的大家都经常会碰到的数据库生产故障,就是数据库无法连接的问题

大家会看到的异常信息往往是“ERROR 1040(HY000): Too many connections”,这个时候就是说数据库的连接池里已经有太多的连接了,不能再跟你建立新的连接了! 不知道大家是否还记得我们最早讲过的数据库的整体架构原理,数据库自己其实是有一个连接池的,你的每个系统部 署在一台机器上的时候,你那台机器上部署的系统实例/服务实例自己也是有一个连接池的,你的系统每个连接Socket 都会对应着数据库连接池里的一个连接Socket,这就是TCP网络连接,如下图所示。

所以当数据库告诉你Too many connections的时候,就是说他的连接池的连接已经满了,你业务系统不能跟他建立更 多的连接了! 曾经在我们的一个生产案例中,数据库部署在64GB的大内存物理机上,机器配置各方面都很高,然后连接这台物理机 的Java系统部署在2台机器上,Java系统设置的连接池的最大大小是200,也就是说每台机器上部署的Java系统,最多 跟MySQL数据库建立200个连接,一共最多建立400个连接,我们看下图示意。

但是这个时候如果MySQL报异常说Too many Connections,就说明目前MySQL甚至都无法建立400个网络连接?这 也太少了吧!毕竟是高配置的数据库机器! 于是我们检查了一下MySQL的配置文件,my.cnf,里面有一个关键的参数是max_connections,就是MySQL能建立 的最大连接数,设置的是800。 那奇怪了,明明设置了MySQL最多可以建立800个连接,为什么居然两台机器要建立400个连接都不行呢? 这个时候我们可以用命令行或者一些管理工具登录到MySQL去,可以执行下面的命令看一下:

show variables like 'max_connections'

此时你可以看到,当前MySQL仅仅只是建立了214个连接而已! 所以我们此时就可以想到,是不是MySQL根本不管我们设置的那个mac_connections,就是直接强行把最大连接数设 置为214了?于是我们可以去检查一下MySQL的启动日志(/var/log/mysqld.log),可以看到如下的字样:

Could not increase number of max_open_files to more than mysqld (request: 65535)
Changed limits: max_connections: 214 (requested 2000)
Changed limits: table_open_cache: 400 (requested 4096)

所以说,看看日志就很清楚了,MySQL发现自己无法设置max_connections为我们期望的800,只能强行限制为214 了! 这是为什么呢?简单来说,就是因为底层的linux操作系统把进程可以打开的文件句柄数限制为了1024了,导致 MySQL最大连接数是214! 可能有的人会疑惑说,为什么linux的文件句柄数量被限制了,MySQL最大连接数就被限制了呢? 其实这个问题你先不用操心了,因为这都是linux的知识,你现在只要知道有这么一件事儿就可以了,看下图的示意。Version:0.9 

今天我们继续讲解昨天的那个案例背景,其实就是经典的Too many connections故障,他的核心就是linux的文件句 柄限制,导致了MySQL的最大连接数被限制,那么今天来讲讲怎么解决这个问题。

其实核心就是一行命令:

ulimit -HSn 65535

然后就可以用如下命令检查最大文件句柄数是否被修改了

cat /etc/security/limits.conf
cat /etc/rc.local

如果都修改好之后,可以在MySQL的my.cnf里确保mac_connections参数也调整好了,然后可以重启服务器,然后重 启MySQL,这样的话,linux的最大文件句柄就会生效了,MySQL的最大连接数也会生效了。

然后此时你再尝试业务系统去连接数据库,就没问题了!

另外再给大家解释一个问题,有人还是疑惑说,为什么linux的最大文件句柄限制为1024的时候,MySQL的最大连接 数是214呢?

这个其实是MySQL源码内部写死的,他在源码中就是有一个计算公式,算下来就是如此罢了!

然后再给大家说一下,这个linux的ulimit命令是干嘛用的,其实说白了,linux的话是默认会限制你每个进程对机器资 源的使用的,包括可以打开的文件句柄的限制,可以打开的子进程数的限制,网络缓存的限制,最大可以锁定的内存 大小。

因为linux操作系统设计的初衷,就是要尽量避免你某个进程一下子耗尽机器上的所有资源,所以他默认都是会做限制 的。

那么对于我们来说,常见的一个问题,其实就是文件句柄的限制。

因为如果linux限制你一个进程的文件句柄太少的话,那么就会导致我们没办法创建大量的网络连接,此时我们的系统 进程就没法正常工作了

举个例子,比如MySQL运行的时候,其实就是linux上的一个进程,那么他其实是需要跟很多业务系统建立大量的连接 的,结果你限制了他的最大文件句柄数量,那么他就不能建立太多连接了!

所以说,往往你在生产环境部署了一个系统,比如数据库系统、消息中间件系统、存储系统、缓存系统之后,都需要 调整一下linux的一些内核参数,这个文件句柄的数量是一定要调整的,通常都得设置为65535

还有比如Kafka之类的消息中间件,在生产环境部署的时候,如果你不优化一些linux内核参数,会导致Kafka可能无法 创建足够的线程,此时也是无法运行的。

所以我们平时可以用ulimit命令来设置每个进程被限制使用的资源量,用ulimit -a就可以看到进程被限制使用的各种资 源的量

比如 core file size 代表的进程崩溃时候的转储文件的大小限制,max locked memory就是最大锁定内存大小,open files就是最大可以打开的文件句柄数量,max user processes就是最多可以拥有的子进程数量。

设置之后,我们要确保变更落地到/etc/security/limits.conf文件里,永久性的设置进程的资源限制

所以执行ulimit -HSn 65535命令后,要用如下命令检查一下是否落地到配置文件里去了。

cat /etc/security/limits.conf
cat /etc/rc.local
负载均衡本质:五种调度算法的实战边界与失效场景 负载均衡是分布式系统流量治理的核心机制,其本质是在信息不完备条件下进行近似最优决策。它基于四层/七层网络模型,通过健康检查、算法选择(如Round Robin、Least Connections)、会话保持(Sticky Sessions)等环节实现请求分发。技术价值在于提升系统可用性、伸缩性与容错能力,支撑高并发场景下的稳定服务。典型应用场景包括Web服务接入、微服务通信、CDN边缘调度及数据库读写分离。然而,每种策略均有明确适用边界——例如Round Robin在异构节点下导致隐性不均,Least Co 阅读详情

相关推荐

Aurora数据库架构原理与生产级调优实战

Amazon Aurora 是一种云原生关系型数据库服务,其核心突破在于存储与计算的物理分离架构,通过分布式存储层、轻量化计算节点和共享存储多视图同步机制,重构了传统数据库的可靠性与扩展性边界。它并非简单兼容 MySQL/PostgreSQL,而是在底层实现了 Quorum 写入、毫秒级故障恢复、零感知自动扩容等工程特性,显著提升 OLTP 吞吐与读写一致性。技术价值体现在降低运维复杂度、消除主从延迟、减少备份停机窗口,并支撑实时风控、高并发交易等严苛场景。本文深入解析 Aurora 的存储分片、计算代理、

weixin_33748818的博客 372

解决Too many connections问题

有些人觉得,解决too many connections问题,灰非简单,down了mysql,修改my.cnf调大max_connections,好吧,你想法是没错的,这的确可以解决问题,但试问对于线上在跑的MySQL,你能随便down吗?嘻嘻,如果不行,只能用另外的方法了 一旦出现了too many connections错误,DBA或者运维人员已经连接不上MySQL去动态修改max_conn...

weixin_30693683的博客 677

OpenStack Glance手动安装实战:镜像服务配置与排障指南

Glance是OpenStack中负责镜像管理的核心服务,其本质是提供镜像存储、元数据管理和访问控制的统一API层。它基于RESTful架构设计,依赖数据库(如MySQL/PostgreSQL)持久化元数据,通过glance_store插件支持多种后端(File/Swift/Ceph),并深度集成Keystone实现多租户鉴权。技术价值在于保障云平台虚拟机快速交付能力——一旦Glance异常,新建实例将阻塞在镜像加载阶段。典型应用场景包括私有云镜像仓库建设、金融行业合规镜像分发、制造企业定制OS模板管理等。

weixin_30457465的博客 399

关于too many connections问题产生原因的理解

产生too many connections 的直接原因是因为数据库提供的连接被全部占满了。数据库可以提供多少连接,可以再my.cnf(linux)或者my.ini(windows)下设定。这个直接原因的上一次原因是引用程序占据连接不释放。至于为何不释放,那就是各个应用程序的具体问题了。   之前 ,遇到这个问题时,在网上找了很多关于这方面的资料,发现都不能解决这方面的问题。网上的资料只能提供一

6106

Rocky Linux 8 安装 MariaDB 实战指南:从零配置到 RAGFlow 生产就绪

MariaDB 是开源关系型数据库的主流选择,广泛用于 Web 应用、知识库系统(如 RAGFlow)及企业级后端服务。其核心原理基于客户端-服务器架构,采用 SQL 标准协议通信,并依赖 systemd 管理服务生命周期、dnf 进行包分发与依赖解析。在 Rocky Linux 8 这一 CentOS 替代发行版中,MariaDB 虽为默认数据库,但需手动完成初始化、SELinux 上下文修复、安全加固与配置治理,才能满足生产环境对稳定性、权限隔离和远程访问的严苛要求。本文聚焦真实部署场景,覆盖 WSL2

蓝色妖姬 511

CentOS 8 MariaDB生产部署:模块流、SELinux与等保合规实战

MariaDB 是一款开源关系型数据库,广泛用于企业级应用和AI基础设施(如RAGFlow)的元数据与工作流存储。其核心原理基于InnoDB存储引擎与SQL标准协议,具备事务一致性、行级锁及插件化安全扩展能力。技术价值在于高兼容性、低学习成本及深度可控的安全加固路径,特别适合需满足等保三级等合规要求的政务、金融类系统。典型应用场景包括向量元数据管理、审计日志持久化、多租户权限控制及与RAGFlow等AI平台的稳定集成。本文聚焦已停止维护但仍在大量运行的CentOS 8环境,深入解析DNF模块流机制、SELi

weixin_30621711的博客 428

解决Too many connections

too many connections

dqchouyang的专栏 2485

向量数据库实战选型指南:从原理到生产踩坑

向量数据库本质是支撑语义相似性搜索的专用系统,其核心在于近似最近邻(ANN)算法对高维空间距离计算的工程优化。它不替代关系型数据库,而是补足传统索引在模糊匹配、多模态检索和嵌入召回等场景的能力短板。技术价值体现在将O(n)暴力搜索压缩至O(log n)级响应,依赖嵌入模型、索引结构(如HNSW/IVF)、存储引擎与查询执行器四大支柱协同。典型应用场景包括RAG增强、以图搜图、用户行为相似推荐及工业知识库语义检索。本文聚焦真实生产环境中的性能瓶颈、运维陷阱与选型决策逻辑,覆盖Qdrant、Milvus、Pin

weixin_30838873的博客 371

如果MySQL出现 “Too many connections“ 错误,该如何解决?

当你想要连接MySQL时出现"Too many connections" 报错的情况下,该如何解决才能如愿以偿呢?

T_LOYO的博客 2921

CentOS 8安装MariaDB避坑指南:等保/RAGFlow适配实战

MariaDB作为主流开源关系型数据库,其在Linux系统中的部署并非简单执行安装命令即可完成。尤其在已停止维护的CentOS 8环境下,包管理策略变更、SELinux策略缺失、内核兼容性问题及默认配置缺陷共同构成多重隐性门槛。本文围绕MariaDB核心原理展开,解析服务单元注册机制、配置文件加载路径依赖、InnoDB缓冲池与连接池协同机制等关键技术点,强调环境预检、安全加固与场景化调优的技术价值。面向RAGFlow元数据存储、等保三级测评、虚拟机轻量部署等典型工程场景,提供可验证的实操路径与故障诊断链路,

dianxiangong2403的博客 356

FastAPI集成Redis高可用实践:缓存、锁与异步连接

Redis作为内存数据库,是提升Web服务性能的关键中间件;其核心原理在于基于键值对的高速读写与多种数据结构支持;技术价值体现在降低数据库压力、实现跨进程状态共享及解耦耗时操作;典型应用场景包括接口响应缓存、分布式锁控制、用户会话管理与轻量任务队列;在FastAPI这类异步框架中,必须采用aioredis连接池、安全键设计、orjson序列化及熔断降级机制,才能真正发挥Redis的低延迟优势,避免连接耗尽、缓存穿透与锁失效等生产事故。

weixin_30580341的博客 370

Linux系统MySQL报错:too many connections原因及解决方法

MySQL报错“too many connections”的原因可能有以下几种:访问量过高:当MySQL服务器面对大量的并发请求时,已经建立的连接数可能会不足以处理所有的请求,从而导致连接池耗尽、连接被拒绝、出现“too many connections”等错误。max_connections值过小:默认情况下,MySQL的最大连接数是100个,如果这个值过低,则会导致在达到这个限制后,任何新的连...

fastboot 2060

MySQL实战作战地图:从慢查询到在线变更的生产级指南

MySQL作为最主流的关系型数据库,其核心价值不仅在于支持标准SQL语法,更在于高并发、强一致性与海量数据下的稳定交付能力。理解索引最左前缀原理、EXPLAIN执行计划解读、事务隔离级别与行锁机制,是保障线上服务不被慢查询拖垮、死锁阻塞或DDL锁表的关键技术基础。这些能力直接决定数据库在订单系统、用户中心、库存服务等典型业务场景中的响应效率与数据安全。本文聚焦真实生产环境中的高频痛点——如WHERE条件导致全表扫描、ALTER TABLE卡住、JOIN结果异常、JSON字段查询低效等,结合MySQL 5.6

cm333666的博客 381

Ubuntu 20.04 安装 MariaDB 实战指南:兼容性、安全配置与 RAGFlow 集成

MariaDB 是一款开源关系型数据库,作为 MySQL 的精神续作,具备高度兼容性、更强的安全默认策略和活跃的社区支持。其核心原理基于客户端-服务器架构,采用插件化认证(如 unix_socket 和 mysql_native_password)、ACID 事务引擎(InnoDB/Aria)及分层配置体系。技术价值体现在轻量可靠、开箱即用的安全机制(AppArmor、systemd 集成、默认本地绑定)以及对现代 AI 应用场景(如 RAGFlow)的优异适配——尤其在元数据一致性保障与 UTF8MB4

cuiyingchan0663的博客 410

AI Orchestration实战:MuleSoft+LangChain构建企业级智能交响体系

AI Orchestration(AI编排)是一种面向企业复杂系统的智能协同范式,其核心在于解耦数据集成与语义推理——前者由MuleSoft等企业服务总线完成协议适配、数据聚合与合规封装,后者依托LangChain实现意图理解、工具调度与动态逻辑编织。该架构显著提升AI应用的可解释性、可审计性与业务对齐度,广泛应用于销售智能助手、客户流失预警、跨系统工单分析等高价值场景。本文基于真实产线案例,详解如何利用MuleSoft处理SAP RFC/IDoc/SOQL等异构协议,并通过LangChain工具调用(To

weixin_30698527的博客 363

INSERT INTO实战指南:从原理、避坑到金融级数据迁移

INSERT INTO是SQL中最基础却最易引发生产事故的数据写入操作,其本质是事务性数据投递,涉及WAL日志、共享缓冲区、锁机制与执行计划优化。理解单行插入与批量插入的I/O路径差异,能避免90%的性能瓶颈;掌握ON CONFLICT、CTAS、INSERT...SELECT DISTINCT等模式的适用边界,可显著提升去重、迁移与初始化效率。在金融、电商等高一致性场景中,INSERT常因隐式锁升级、编码错乱、内存溢出或连接泄漏导致服务中断。本文聚焦真实生产环境下的INSERT调优策略、分批控制、错误收敛

weixin_30888413的博客 379

Go语言构建高性能WebSocket压测工具:设计、实现与实战调优

在实时通信和微服务架构中,WebSocket协议是实现全双工通信的核心技术,其性能直接影响用户体验和系统稳定性。为了确保服务在高并发场景下的可靠性,压力测试成为不可或缺的环节。通用压测工具在处理WebSocket这类长连接、高并发场景时,往往在连接管理和资源开销上存在局限。因此,基于Go语言并发模型,结合协程池与多路复用I/O,可以构建出轻量且高效的专用压测工具。这类工具通过模拟海量连接、自定义消息流,并集成高精度指标收集系统,能够精准评估服务的吞吐量、延迟及稳定性。其技术价值在于为金融交易、在线游戏、物联

weixin_34186128的博客 352

39 案例实战:如何解决经典的Too many connections故障?背后原理是什么.pdf

39 案例实战:如何解决经典的Too many connections故障?背后原理是什么.pdf

上一篇: 第11章 RabbitMQ扩展
下一篇: 53 理解MVCC机制的前奏:undo log版本链是个什么东西?
limeOracle
博客等级 码龄10年 11粉丝 566原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值