一场FullGC故障排查

简介: 项目中解析用户上传的Excel样本时,将数据存为List<Map<String, String>>导致内存膨胀。一个17MB的文件占用堆内存达128MB,空间效率仅约13.4%。主因是HashMap对象头、包装类等额外开销大,且数据在JVM中驻留4-12小时,易引发OOM。需优化存储结构以降低内存占用。

二、问题解决
2.1 找到大对象在代码中的位置与问题的根本原因
首先我们根据上述过程找到对应位置与逻辑
我们的项目中大概逻辑是这样的:

  1. 首先会解析用户上传的Excel样本,并将其加载到内存中作为一个List变量,即我们上述看到的变量。一个20w的样本,此时字段数量有a个,大概占用空间100mb左右。
  2. 然后遍历循环用户样本,根据用户样本中的数据,再增加一些额外的请求数据,根据此数据请求相关结果。此时字段数量有a+n个,占用空间已经在200mb左右。
  3. 循环完成后将此200mb的数据存入缓存。
  4. 开始生成excel,将200mb数据从缓存中取出,并根据之前记录的a个字段,取出初始的样本字段填充至excel。
    用流程图表示为:

结合一些具体排查问题的图片:

其中一个现象是每次gc后的最小内存正在逐步变大,对应上述步骤中第二步,内存正在逐步膨胀。
结论:
将用户上传的excel样本加载到内存中,并将其作为一个List>的结构存储起来,首先一个20mb的excel文件以此方式存储会膨胀占用120mb左右堆内存,此步骤会大量占用堆内存,并且因为任务逻辑原因,该大对象内存会在jvm中存在长达4-12小时之久,导致一但任务过多,jvm堆内存很容易被打满。
这里列举了为什么使用HashMap会导致内存膨胀,其主要原因是存储空间效率比较低:
一个Long对象占内存计算:在HashMap结构中,只有Key和Value所存放的两个长整型数据是有效数据,共16字节(2×8字节)。这两个长整型数据包装成java.lang.Long对象之后,就分别具有8字节的MarkWord、8字节的Klass指针,再加8字节存储数据的long值(一个包装对象占24字节)。
然后这2个Long对象组成Map.Entry之后,又多了16字节的对象头(8字节MarkWord+8字节Klass指针=16字节),然后一个8字节的next字段和4字节的int型的hash字段(8字节next指针+4字节hash字段+4字节填充=16字节),为了对齐,还必须添加4字节的空白填充,最后还有HashMap中对这个Entry的8字节的引用,这样增加两个长整型数字,实际耗费的内存为(Long(24byte)×2)+Entry(32byte)+HashMapRef(8byte)=88byte,空间效率为有效数据除以全部内存空间,即16字节/88字节=18%。
——《深入理解Java虚拟机》5.2.6
以下是刚上传的excel中dump出的堆内存对象,其占用的内存达到了128mb,而上传的excel实际只有17.11mb。

空间效率17.1mb/128mb≈13.4%

相关文章
|
SQL Java 数据库连接
JDBC DriverManager 详解
JDBC(Java Database Connectivity)是 Java 标准库中用于与数据库进行交互的 API。它允许 Java 应用程序连接到各种不同的数据库管理系统(DBMS),执行 SQL 查询和更新操作,以及处理数据库事务。在 JDBC 中,DriverManager 是一个关键的类,用于管理数据库驱动程序和建立数据库连接。本文将详细介绍 JDBC DriverManager 的用法,面向基础小白,帮助您快速入门 JDBC 数据库连接。
443 1
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
大模型专业名词解释手册
本手册由油炸小波设计提示词,Manus创作,系统梳理大语言模型核心概念,涵盖基础架构、训练方法、优化技术、应用推理及伦理评估。内容详实,术语权威,助力深入理解AI大模型世界。
|
3月前
|
监控 网络协议 测试技术
云服务器性能调优十大技巧
本文系统总结云服务器性能调优十大技巧,涵盖CPU绑定、内存管理、磁盘IO、网络优化、内核调参、监控压测、自动化脚本及电商实战案例,助力企业提升资源利用率与业务性能,实现高效稳定运行。(238字)
242 0
|
3月前
|
人工智能 自然语言处理 搜索推荐
2025年热销榜单:头部AI数字人产品推荐
2025年AI数字人迎来爆发,集之互动、Synthesia、Soul Machines三款产品引领行业变革。从智能问答到多语言翻译,再到情感交互,它们在服务、教育、营销等场景展现强大潜力。本文深度解析其技术优势与适用领域,助你精准选型,把握人机交互新机遇。
200 0
|
3月前
|
人工智能 JSON 安全
大模型应用开发中MCP与Function Call的关系与区别
Function Call依赖模型直接调用工具,适用于单一场景;MCP通过标准化协议实现模型与工具解耦,支持跨模型、跨设备的动态集成。二者可协同工作,形成“意图解析-协议传输-工具执行”分层架构,未来将趋向融合,推动AI应用生态标准化发展。
|
3月前
|
人工智能 JSON 数据挖掘
全面认识MCP:大模型连接真实世界的“USB-C接口”
MCP通过动态上下文窗口、多步骤流程支持与标准化通信协议,实现AI智能体对用户偏好、会话历史与环境数据的持续记忆与灵活响应。其基于JSON-RPC 2.0的统一接口,支持Stdio、HTTP/SSE等传输方式,简化了大模型与工具系统的集成。借助MCP,AI应用可高效完成数据分析、办公自动化等复杂任务,提升处理能力的同时保障安全合规,推动大模型在真实场景中的落地应用。
|
8月前
|
存储 算法 Windows
【硬盘容量缩水真相】新买的U盘插上那刻我崩溃了:标称128G的存储为何只剩112G?
新买的硬盘或U盘在Windows中显示的容量为何与标称不符?其实并非商家“坑”,而是存储单位换算标准不同所致。本文详解bit、Byte、KB、MB、GB等存储单位的区别,介绍国际单位制(SI)与国际电工委员会(IEC)两种标准,解释为何500GB硬盘在系统中仅显示约465GB。带你从底层原理理解计算机存储单位的换算逻辑,揭开“消失”的容量之谜。
1487 0
【硬盘容量缩水真相】新买的U盘插上那刻我崩溃了:标称128G的存储为何只剩112G?
|
12月前
|
人工智能 数据挖掘 Linux
DeepSeek满血版大赏:官方得了“MVP”,第三方是“躺赢狗”?
DeepSeek开源了6710亿参数的R1和2360亿参数的V3两大满血版模型,助力第三方AI平台快速提升性能。此举不仅扩大了DeepSeek的技术影响力,还通过数据飞轮效应优化模型,同时为企业级用户提供灵活变现方式。对于大众,这意味着更多选择、更低使用成本和更快技术迭代。尽管第三方平台可能“阉割”或定制功能,但它们将顶级AI带入更多场景,如比亚迪车机、腾讯元宝等,让AI更普及。官方与第三方各有所长:官方提供最强性能,第三方确保稳定体验。最终,DeepSeek与第三方共同推动AI发展,实现技术普惠。
609 2
|
机器学习/深度学习 人工智能 算法
DeepSeek-R1论文细节时间线梳理
中国AI初创公司DeepSeek发布了大语言模型R1,该模型在推理任务上媲美OpenAI的ChatGPT,且训练成本仅600万美元。DeepSeek由杭州对冲基金High-Flyer支持,总部位于杭州和北京。R1基于V3-Base,使用监督微调和强化学习训练,针对硬件限制进行了优化。模型在多语言处理、推理风格等方面表现出色,但存在一些局限性,如法语表现欠佳、偶尔切换语言等。DeepSeek的创新技术包括FP8量化、多头潜在注意力和蒸馏方法,引发了广泛关注和讨论。开源社区正积极尝试复现其结果,但面临训练数据和代码未公开的挑战。DeepSeek的低成本高效训练策略为AI领域带来了新的思考方向。
1002 2
|
人工智能 自然语言处理 搜索推荐
销售易、悟空、神州云动CRM:全方位功能解析与优势特色盘点
销售易CRM、悟空CRM和神州云动CRM各自具备独特的产品功能与优势,适用于不同类型的企业。销售易CRM提供移动化、社交化和AI驱动的全流程管理,适合大型企业及跨国公司;悟空CRM以智能数据分析和移动办公支持见长,适合中大型企业;神州云动CRM则凭借灵活定制和多行业适配能力,特别适合大中型企业。企业在选择时应根据自身需求和发展战略,挑选最适合的CRM系统,以实现客户关系管理的最大化效益。

热门文章

最新文章