Java应用中 慢SQL导致内存无法回收,然后导致线程阻塞,CPU被撑爆

article/2025/8/11 12:56:46

问题分析

慢SQL的直接危害

数据库连接池长时间被占用,导致线程堆积,请求阻塞。
未释放的 ResultSet、Statement 或 Connection 可能导致内存泄漏(例如未正确关闭资源)。
大结果集(如一次性加载百万条数据到内存)直接导致堆内存激增。

连锁反应

线程阻塞:大量线程因等待数据库响应而处于 TIMED_WAITING 或 BLOCKED 状态。
GC压力:频繁Full GC尝试回收内存失败,导致GC线程占用CPU资源。
CPU飙升:线程堆积引发频繁上下文切换,叠加GC压力,最终CPU利用率接近100%。

定位与排查步骤

确认慢SQL

通过数据库慢查询日志(如MySQL的 slow_query_log)定位执行时间过长的SQL。
使用 EXPLAIN 分析SQL执行计划,检查是否缺少索引或出现全表扫描。

线程堆栈分析

bash# 生成线程快照jstack > thread_dump.txt
搜索 BLOCKED 或 TIMED_WAITING 状态的线程,观察是否集中在数据库操作(如 jdbc.Connection 相关调用)。

内存与GC监控

bash# 实时GC状态jstat -gcutil 1000
关注 Old Generation(老年代)使用率是否持续高位,Full GC频率是否异常。

资源泄漏检查

使用 jmap 生成堆转储文件,通过MAT工具分析大对象或未释放的数据库资源:bashjmap -dump:live,format=b,file=heap_dump.hprof

解决方案

1. SQL优化

为WHERE条件字段添加索引(联合索引注意最左匹配原则)。
避免 SELECT *,改用明确字段列表。
分页查询优化:用延迟关联替代 LIMIT 100000, 10。
复杂查询拆分为多个简单步骤,减少锁竞争。

2. 连接池调优
java// HikariCP 示例配置HikariConfig config = new HikariConfig();config.setMaximumPoolSize(20); // 根据DB性能调整config.setConnectionTimeout(3000); // 超时快速失败config.setLeakDetectionThreshold(5000); // 检测未关闭的连接3. 代码层修复

强制资源释放:使用 try-with-resources 确保关闭:javatry (Connection conn = dataSource.getConnection(); PreparedStatement ps = conn.prepareStatement(sql); ResultSet rs = ps.executeQuery()) { // 处理结果}
结果集分页:避免一次性加载全部数据,改用流式查询:javastatement.setFetchSize(100); // 分批拉取数据

4. JVM调优
bash# 增加老年代空间,减少Full GC频率-XX:NewRatio=2 -XX:+UseG1GC # 对高延迟场景更友好-XX:MaxGCPauseMillis=200 # 目标暂停时间5. 熔断降级

集成Resilience4j或Hystrix,在数据库超时率达到阈值时触发熔断,避免级联故障。

关键监控指标

在这里插入图片描述

注意事项

  • 谨慎使用异步线程:异步处理可能转移问题到其他线程池,需确保所有资源最终释放。
  • ORM框架陷阱:Hibernate的N+1查询问题(启用 hibernate.generate_statistics 检测)。
  • 连接池保活:配置 idleTimeout 和 maxLifetime 防止连接僵死。

http://www.hkcw.cn/article/uswZIhtLYJ.shtml

相关文章

高质量AI歌曲生成器ACE-Step一键启动整合包,AI自动谱曲自动演唱

本次分享一款AI歌曲创作利器:ACE-Step,ACE-Step是刚发布不久的AI自动谱曲AI自动演唱软件,软件在歌曲生成速度、音乐连贯性和可控性上相对同类软件有了较大提升。ACE-Step在3小时前刚发布了新版本,我基于当前最新版本制作了免安装一…

Facebook 的隐私保护措施是否足够?技术观点

在数字时代,隐私保护成为了公众关注的焦点,尤其是对于拥有数十亿用户的社交媒体巨头 Facebook 来说,其隐私保护措施的有效性更是备受瞩目。本文将从技术角度探讨 Facebook 的隐私保护措施是否足够。 数据收集与使用 Facebook 收集用户数据的…

多语种OCR识别系统,引领文字识别新时代

在全球化与数字化深度融合的今天,语言障碍成为企业跨国协作、信息管理的一大挑战。无论是跨国合同签署、多语言档案管理,还是跨境商务沟通,高效精准的文字识别技术已成为刚需。中安智能OCR多语种识别系统应运而生,凭借其强大的光学…

强化学习实战:训练AI玩转OpenAI Gym

强化学习实战:训练AI玩转OpenAI Gym 系统化学习人工智能网站(收藏):https://www.captainbed.cn/flu 文章目录 强化学习实战:训练AI玩转OpenAI Gym摘要引言强化学习基础与算法分类1. 核心概念与数学表示2. 算法分类与…

前端实现导出element-plus表格和从后端获取数据导出,支持勾选导出

1. 纯前端实现导出 安装file-saver和xlsx file-saver: 用于在浏览器中触发文件的保存下载(保存为本地文件)。 使用场景: 当已经在 JavaScript 中生成了文件(如 Blob 对象),并想让用户保存它时使…

Stable Diffusion学习指南【ControlNet上篇】- 功能介绍、安装和使用

(注:文末扫码获取AI工具安装包和AI学习资料) 自 SD 系列教程发布这几个月,已被大家多次催更 ControlNet 的教程,相信很多朋友也都听说过这款神奇的控图工具。ControlNet 到底是什么?为什么作为一款插件它可…

论文阅读 | CVPR | MambaOut:视觉任务真的需要 Mamba 吗?

文章目录 论文阅读 | CVPR | MambaOut:视觉任务真的需要 Mamba 吗?摘要引言创新点概念讨论Mamba到底适合处理什么样的任务?视觉任务具有很长的序列吗?如何计算Transformer 模块的浮点运算次数(FLOPs)?定义…

基于 Q-learning 的城市场景无人机三维路径规划算法研究,可以自定义地图,提供完整MATLAB代码

一、引言 随着无人机技术的不断发展,其在城市环境中的应用越来越广泛,如物流配送、航拍测绘、交通监控等。然而,城市场景具有复杂的建筑布局、密集的障碍物以及多变的飞行环境,给无人机的路径规划带来了巨大的挑战。传统的路径规…

Vivado IP核之定点数累加Accumulator使用说明

Vivado Accumulator IP核的使用说明 配置步骤 目录 前言 一、Accumulator IP配置步骤 二、仿真 三、仿真分析 总结 前言 在现代数字信号处理和通信系统中,对数据进行快速而精确的累加操作是至关重要的。Vivado Accumulator IP核提供了一种灵活、可配置的硬件累…

中科院自动化所万字长文最新综述!当无人机遇上大模型:低空机动性智能体的综述与展望

作者:Yonglin Tian, Fei Lin, Yiduo Li, Tengchao Zhang, Qiyao Zhang, Xuan Fu, Jun Huang, Xingyuan Dai, Yutong Wang, Chunwei Tian, Bai Li, Yisheng Lv, Levente Kovacs, Fei-Yue Wang 单位:中科院自动化所多模态人工智能系统国家重点实验室&…

(35)远程识别(又称无人机识别)(一)

文章目录 前言 1 更改 2 可用的设备 3 开放式无人机ID 4 ArduRemoteID 5 终端用户数据的设置和使用 6 测试 7 为OEMs添加远程ID到ArduPilot系统的视频教程 前言 在一些国家,远程 ID 正在成为一项法律要求。以下是与 ArduPilot 兼容的设备列表。这里(here)有一个关于远…

Uniapp 自定义TabBar + 动态菜单实现教程(Vuex状态管理详解)

大家好,我是一诺。今天跟大家分享一下uniapp 封装自定义底部导航栏(TabBar) 过程中的思考和实践。通过本文,你将学会如何打造一个功能完善、可自由定制的TabBar组件! 先看效果: 支持自定义图标和样式动态…

图数据库Neo4j和JDK安装与配置教程(超详细)

目录 前言 一、Java环境配置 (一)JDK的下载与安装 (二)JDK环境配置 (三)检测JDK17是否配置成功 二、Neo4j的安装与配置 (一)Neo4j的下载与安装 (二)N…

【机器人-基础知识】欧拉角、旋转矩阵和四元数

文章目录 1. 欧拉角1.1. 欧拉角的定义1.2. 欧拉角的公式1.3. 欧拉角的常见问题 2. 旋转矩阵2.1. 旋转矩阵的定义2.2. 常见旋转矩阵的公式1. 二维旋转矩阵2. 三维旋转矩阵 2.3. 旋转矩阵的示例1. 二维示例2. 三维示例 2.4. 旋转矩阵的问题 3. 四元数3.1. 四元数的定义3.2. 四元数…

arcane:Docker 管理的现代 Web 界面

arcane:Docker 管理的现代 Web 界面 arcane Simple and Elegant Docker Management UI written in Typescript and SvelteKit 项目地址: https://gitcode.com/gh_mirrors/arcane2/arcane 项目介绍 在容器化技术日益普及的今天,Docker 已经成为开…

对话肖风博士(上):美元稳定币立法是技术创新的胜利,但影响将非常复杂

【导言】随着美国参议院通过美元稳定币法案的投票动议,以及香港立法会通过港元稳定币条例草案,稳定币快速成为最热门的行业话题,并且吸引了更广泛的关注。人们普遍预期,随着美元稳定币法案的落地,区块链数字经济将迎来…

极氪能源三方桩规模突破130万枪 构建全域充电生态

5月30日,极氪能源宣布其接入的第三方充电桩规模已突破130万枪。这一成就源于极氪能源与近50家主流运营商的合作,形成了战略合作生态。目前,极氪能源三方规模已实现地级行政单位全覆盖,拥有5604座高速站点和7943座超快充站,显著提升了新能源出行效率和用户充电体验。极氪能…

成都通报男子伤人后自伤颈部 警方发布警情详情

新京报讯 5月30日,成都市公安局锦江区分局发布警情通报:编辑 毛天宇责任编辑:0764

清华大学发布李兆杰讣告 沉痛悼念国际法学者

5月29日晚,清华大学法学院发布讣告,沉痛悼念李兆杰教授。李兆杰教授于2025年5月29日在北京因病逝世,享年70岁。李兆杰是汉族,籍贯山东省东明县,1955年出生于吉林省长春市。他曾在北京大学国际法研究所和清华大学法学院任教。作为改革开放以来我国新一代国际法学者中的领军…

SMS凭据管理系统:实现跨平台特权账号安全管理的创新实践

引言:数字化转型中的特权账号管理困境 在数字化转型加速的今天,企业IT架构呈现混合云、多平台、异构数据库并存的复杂态势。据Gartner统计,超过75%的数据泄露事件与特权账号滥用相关,而传统静态密码管理方案已无法满足动态安全需…