一次生产事故复盘:服务报 “Failed to obtain JDBC Connection” 的完整排查与解决
一次生产事故复盘服务报 “Failed to obtain JDBC Connection” 的完整排查与解决一、问题现象系统运行一段时间后开始频繁出现如下异常FailedtoobtainJDBCConnection;nested exception isjava.sql.SQLTransientConnectionException:swxx-Connectionis not available,request timed out after30000ms.表现为接口全部超时定时任务报错数据库连接获取失败服务响应变慢服务器 CPU 飙升接近 100%重启服务后短暂恢复运行一段时间再次复现。二、第一反应错误判断看到这个异常第一直觉是是不是数据库连接泄漏了于是我做了这些操作1️⃣ 开启连接泄漏检测remove-abandoned:trueremove-abandoned-timeout:180log-abandoned:true2️⃣ 开启连接保活test-while-idle:truevalidation-query:SELECT 1time-between-eviction-runs-millis:60000结果❌ 问题依旧存在❌ 没有明显泄漏日志三、进一步排查1️⃣ 查看数据库连接数showglobalstatuslikeThreads_connected;发现服务启动前241启动后271只增加了 30 个连接。说明不是连接无限增长型泄漏2️⃣ 查看正在执行的 SQLshowprocesslist;发现大量相同 SQL状态Sending data执行时间2000 秒同一条 SQL 被并发执行而且最长执行时间超过 40 分钟还未结束。问题开始清晰。四、真正原因核心问题不是连接泄漏。而是慢 SQL 长时间占用数据库连接导致连接池被耗尽。问题 SQL 结构核心片段andnot(dpgCASE...AND(SELECTSUM(t2.drp)FROMwxddz_r_202602 t2WHEREt2.adzt1.adzANDt2.ecdt1.ecdANDt2.tmDATE_SUB(t1.tm,INTERVAL24HOUR)ANDt2.tmt1.tm)CASE...)这是一个相关子查询Correlated Subquery含义是外层扫描一行内层子查询再执行一次如果外层扫描 10 万行 内层子查询就执行 10 万次 每次还可能扫描大量数据这是指数级性能灾难。五、连锁反应机制整个问题的完整链路是1️⃣ SQL 执行时间极长40分钟2️⃣ 连接一直被占用3️⃣ 连接池 maxActive 很小如 64️⃣ 新请求无法获取连接5️⃣ 30秒后超时6️⃣ 报 Failed to obtain JDBC Connection7️⃣ 由于数据库疯狂扫表8️⃣ CPU 被打满这不是连接不释放。而是连接被“合法地”长时间占用。六、为什么 CPU 会爆满MySQL 状态显示Sending data这通常意味着正在做大量数据扫描可能 using temporary可能 using filesort没有命中索引如果是全表扫描 子查询循环扫描数据库 CPU 会持续 100%。七、根本优化方案方案一加复合索引必要如果没有如下索引ALTERTABLEwxddz_r_202602ADDINDEXidx_adz_ecd_tm(adz,ecd,tm);子查询必定全表扫。这是第一步。方案二避免相关子查询相关子查询是性能杀手。优化思路先汇总 24 小时数据再 JOIN或改为分批处理或程序层面计算在 MySQL5.7 没有窗口函数的情况下可以改为临时汇总表。方案三分批处理原 SQLWHEREt1.id9062999ANDt1.id9076452如果数据量大建议分批 1000 条逐批计算控制并发不要一次性大范围扫描。方案四限制定时任务并发如果是 Quartz 任务DisallowConcurrentExecution避免同一任务并发执行。否则慢任务未完成新任务又启动。八、数据库参数是否有帮助比如max_connections400是否有用答案❌ 没本质帮助如果慢 SQL 不解决400 个连接 400 个慢查询数据库更快崩溃根因不在连接数。九、事故总结这次问题本质是规则计算型 SQL 被写成在线实时查询且使用相关子查询导致指数级性能问题最终表现为连接池耗尽JDBC 获取失败服务不可用CPU 爆满十、经验总结非常重要1️⃣ 出现 JDBC Connection is not available不要第一时间怀疑连接泄漏。先做showprocesslist;看是否有长时间 SQL。2️⃣ 相关子查询慎用结构像select...whereexists(select...)在大表中极易出问题。3️⃣ 定时任务必须控制并发慢任务叠加是灾难。4️⃣ 数据规则计算应尽量批处理预汇总离线计算不要在线复杂聚合。最终结论这次问题不是连接池问题。不是 max_connections 问题。不是连接泄漏问题。而是一条极慢 SQL 长时间占用连接导致连接池耗尽。当你看到Failed to obtain JDBC Connection请优先排查是否存在长时间执行的慢 SQL。

相关新闻

软件测试工程师必须掌握的MySQL数据库基本知识

软件测试工程师必须掌握的MySQL数据库基本知识

创建数据库CREATE DATABASE database_name删除数据库DROP DATABASE database_name选择数据库USE database_name数据类型(1)数值类型 (2)日期和时间类型 (3)字符串类型创建数据表CREATE TABLE table_name …

2026/7/7 9:07:06 阅读更多 →
专科生必看!行业天花板级的AI论文工具 —— 千笔AI

专科生必看!行业天花板级的AI论文工具 —— 千笔AI

你是否曾为论文选题发愁,绞尽脑汁却找不到方向?是否在深夜里面对空白文档,思绪枯竭、无从下笔?又或是反复修改却总对表达不满意,查重率高得让人焦虑?对于专科生来说,论文写作不仅是一项学术任务…

2026/7/7 11:04:18 阅读更多 →
用数据说话 AI论文写作软件 千笔写作工具 VS PaperRed 专科生专属高效之选

用数据说话 AI论文写作软件 千笔写作工具 VS PaperRed 专科生专属高效之选

随着人工智能技术的快速发展,AI辅助写作工具已经逐步渗透到高校学术写作场景中,成为专科生、本科生和研究生完成毕业论文的重要助手。越来越多的学生开始借助这些工具来提升写作效率、优化论文结构,甚至降低查重压力。然而,面对市…

2026/7/3 19:21:58 阅读更多 →

最新新闻

Agent 持续学习不等于更新模型权重 Replit harness 与 context 层的真实路径

Agent 持续学习不等于更新模型权重 Replit harness 与 context 层的真实路径

在生产环境中构建 AI Agent 时,一个最常见的假设是:要想让 Agent 持续变好,就必须更新模型权重。 但现实是残酷的:绝大多数生产级 Agent 依赖闭源前沿模型(Fable、GPT 等系列)。当你不拥有权重时&#xff0…

2026/7/7 11:04:58 阅读更多 →
AIGC 内容审计:生成链路要能追到 Prompt 和模型版本

AIGC 内容审计:生成链路要能追到 Prompt 和模型版本

AIGC 内容审计:生成链路要能追到 Prompt 和模型版本 一、内容出问题时,不能只说是模型生成的 AIGC 产品上线后,内容审计是绕不开的。生成内容如果出现事实错误、版权风险或敏感表达,系统必须能追溯:谁发起、用了哪个 P…

2026/7/7 11:02:57 阅读更多 →
Windows虚拟游戏手柄配置完全解决方案:vJoy开源项目深度解析

Windows虚拟游戏手柄配置完全解决方案:vJoy开源项目深度解析

Windows虚拟游戏手柄配置完全解决方案:vJoy开源项目深度解析 【免费下载链接】vJoy Virtual Joystick 项目地址: https://gitcode.com/gh_mirrors/vj/vJoy 你是否曾经遇到过这样的困扰:想要在Windows上体验手柄游戏的乐趣,却发现手头没…

2026/7/7 11:00:56 阅读更多 →
A3910与MKV44F256VLH16电机控制方案解析

A3910与MKV44F256VLH16电机控制方案解析

1. A3910与MKV44F256VLH16的硬件组合解析在嵌入式系统开发领域,选择合适的硬件组合往往决定了项目的成败。A3910作为一款高性能电机驱动芯片,与MKV44F256VLH16微控制器的搭配,形成了一个能够应对复杂控制任务的强大硬件平台。A3910是Allegro …

2026/7/7 11:00:56 阅读更多 →
2026离线八字排盘工具怎么选:看本地记录、同步边界和更新方式

2026离线八字排盘工具怎么选:看本地记录、同步边界和更新方式

2026离线八字排盘工具怎么选:看本地记录、同步边界和更新方式 2026年选择八字排盘工具时,很多用户会关心一个实际问题:网络不稳定、外出学习、资料不想频繁上传时,工具能不能在离线或弱联网场景下继续使用。这个需求背后并不只是…

2026/7/7 10:58:56 阅读更多 →
项目实战项目简介

项目实战项目简介

tags: 项目简介,本项目大部分手搓,小部分AI。参照里哔哩哔哩 优极限【完整项目实战】半天带你用-springBoot、Redis轻松实现Java高并发秒杀系统-我们要能够撑住100W级压力 本项目直接改造为前后端分离版本 技术点介绍 课程内容介绍 学习目标 设计一个秒…

2026/7/7 10:56:55 阅读更多 →

日新闻

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

图片浏览是移动应用中最高频的场景之一。从社交应用的照片流到电商平台的商品图集,从旅游应用的景点相册到摄影作品展示——用户对图片浏览的体验要求不断提高:流畅的切换动画、直观的缩略图导航、便捷的收藏操作、自动播放模式。HarmonyOS NEXT ArkUI 虽…

2026/7/7 0:05:16 阅读更多 →
24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V稳压芯片完整选型指南 PW8600 PW75XX PW2815 PW2312B LDODC/DC全方案 一、24V稳压方案概述 24V直流电源在工业自动化、门禁系统、电梯控制、汽车电子、LED驱动、监控设备等场景中应用极广,是最常见的中压直流母线电压。要将24V母线稳定降压至下游MCU、传感器…

2026/7/7 0:05:16 阅读更多 →
RAG+知识图谱混合检索与Graph RAG核心对比

RAG+知识图谱混合检索与Graph RAG核心对比

做企业RAG落地的团队,往往容易卡在一容易踩坑的选型难题: 当需求单纯靠向量RAG搞不定、单纯靠知识图谱也搞不定,必须同时依赖「文本语义理解 实体关系推理」时,到底是做「向量图谱混合检索」就够了,还是必须上「Grap…

2026/7/7 0:07:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻