堆外内存 OOM:现象分析与优化方案

目录

一、现象分析

(一)内存使用率不断上升

(二)GC 时间飙升

(三)线程被 Block

(四)RES 超过 -Xmx 设置

二、堆外内存 OOM 的原因

(一)堆外内存泄漏的主要原因

1. 主动申请未释放

2. JNI 调用的 Native Code 申请的内存未释放

(二)堆外内存泄漏的排查策略

1. 使用 Native Memory Tracking(NMT)

2. 主动申请未释放的排查方法

2.1 限制堆外内存的大小

2.2 监控堆外内存的使用情况

2.3 检查内存释放代码

3. JNI 调用未释放的排查方法

4. 外部依赖的影响

三、优化方案

(一)合理管理堆外内存

1. 显式释放堆外内存

2. 封装内存管理

3. 内存池管理

(二)设置合理的堆外内存大小

1. 使用 -XX:MaxDirectMemorySize 控制堆外内存大小

2. 与系统内存匹配

(三)定期监控和告警

1. 启用 Native Memory Tracking (NMT)

2. 使用 GC 日志分析内存使用情况

3. 集成监控平台

4. 设置内存告警和自动化测试

四、总结


干货分享,感谢您的阅读!

在 Java 中,堆内存(Heap)是垃圾回收器管理的主要内存区域,而堆外内存(Direct Memory)则是 JVM 之外的一块内存区域。堆外内存的分配和释放不受 JVM 垃圾回收机制的管理,因此容易出现内存泄漏或 OOM(OutOfMemoryError)等问题。

历史主要基本文章回顾:

涉猎内容 具体链接
Java GC 基础知识快速回顾 Java GC 基础知识快速回顾-CSDN博客
垃圾回收基本知识内容
一文搞懂堆外内存(模拟内存泄漏) 平时编程时,在Java中创建对象,实际上是在堆上划分了一块区域,这个区域叫堆内内存。使用这-Xms -Xmx来指定新生代和老年代空间大小的初始值和最大值,这初始值和最大值也被称为 Java堆的大小,即堆内内存大小。这个堆内内存完全受 JVM管理,JVM有垃圾回收机制,所以我们一般不必关系对象的内存如何回收。剖开JVM内存模型,来看下其堆划分:由图可知Java8使用元空间替代永久代且元空间放在堆外内存上,这是为啥?类的元数据信息常用到,在GC时回收效率偏低。类的元数据信息。... 阅读详情

相关推荐

JVM的堆外内存

JVM的堆外内存

流水账 1778

Java内存溢出(OOM)全解析:场景、原因与实战解决方案

OOM问题本质是资源管理问题。通过理解内存模型、合理监控与调优,结合代码层面的谨慎实践,可显著降低其发生概率。记住,预防胜于治疗,良好的编程习惯与定期的性能分析是避免OOM的最佳武器。

cokaxivurb的博客 1564

JVM堆外内存与元空间OOM问题排查实战

JVM内存管理是Java性能优化的核心领域,其中非堆内存(包括元空间和堆外内存)的OOM问题往往比堆内存溢出更难排查。元空间存储类元数据等JVM运行时信息,而堆外内存则通过DirectByteBuffer等技术实现高性能IO操作。当这些区域发生内存泄漏时,常规的堆分析工具往往失效,需要借助Native Memory Tracking等特殊工具。通过监控内存分配、分析类加载情况、检查资源释放逻辑,可以定位到Netty未释放ByteBuf或Groovy动态类加载等典型问题。本文结合金融系统和微服务案例,详解如何

weixin_34341117的博客 422

深入剖析 MetaSpace OOM 问题:根因分析与高效解决策略

MetaSpace区是JVM内存管理中的关键部分,负责存储类元数据。随着Java 8的推出,MetaSpace取代了PermGen区,但其灵活性也带来了新的挑战,尤其是在动态类加载和频繁类更新的场景下,容易导致MetaSpace内存溢出(OOM)问题。本文探讨了MetaSpace OOM的根本原因,包括类加载器泄漏、内存管理不当和GC效率低下等,并提供了一系列调优策略和解决方案,帮助开发者有效排查和防止此类问题的发生,确保应用程序的稳定性和高可用性。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 15万+

Unity3D安装:离线安装 Unity

Unity 下载助手 (Download Assistant) 支持离线部署。在这种部署方式中,可下载用于安装 Unity 的所有文件,然后生成脚本以便在未接入互联网的其他计算机上重复相同的安装。运行下载助手,并在一台计算机上正常安装 Unity。此计算机必须有足够的可用磁盘空间来下载所有文件。单击下拉选单并选择 __Custom__,然后选择要将文件下载到的位置。打开 PC 的文件管理器,导航到之前指定的自定义位置文件夹,然后在该文件夹内查找。整理翻译,转载请注明出处!

ygtu2018的博客 3244

保姆级教程:用NILMTK和REDD数据集,5分钟跑通你的第一个负荷分解模型

本文提供了一份详细的NILMTK和REDD数据集负荷分解模型教程,适合零基础用户快速上手。从环境准备、数据获取到模型构建和评估,全程仅需5分钟即可完成。特别适合希望快速入门非侵入式负荷分解(NILM)的开发者,涵盖数据预处理、模型训练及结果可视化等关键步骤。

weixin_30493401的博客 438

ubuntu22.04 安装部署 openclaw

ubuntu22.04 安装部署 openclaw

nalanxiaoxiao2011的博客 948

采用了fluent模拟了平壁面结霜过程。udf,很经典,可以试试。

利用该模型作为FLUENT中的源项,模拟了在局部冷却下冷表面上的霜形成,以预测霜的形态、温度分布和霜的重量,结果与实验结果吻合良好。结果显示,霜首先围绕冷却块形成,然后逐渐向其他方向扩展,冷却块上方的霜密度最大。随着时间的推移,平均霜厚度逐渐增加,生长速率减慢,而平均霜密度随增长速率变快而增加。相变传递微观过程与机理、蒸发及冷凝换热、强化传热、高效传热管、热泵、制冷、节水节能新技术、电子元器件冷却、余热回收及梯级利用等。udf,很经典,可以试试。工程热物理、空调、热能、低温制冷、化工、物理等。

qq_15963745的博客 912

【Unity实战篇 】| 游戏中实现镂空遮罩效果【矩形、圆形镂空遮罩】

本文来写一下怎样在Unity中完成一个 镂空遮罩 的效果。 镂空遮罩 比较常用的有两种:矩形镂空遮罩、圆形镂空遮罩。 镂空遮罩 在游戏中常被当做新手引导必备的内容,可以给玩家更多不一样的体验。 下面就一起来看一下怎样做出这种效果吧!

努力前行,总会成为自己心中的那道光 1万+

贝叶斯网络在R语言中的应用

本文将介绍如何在R语言中使用贝叶斯网络进行建模和推断,并提供相应的源代码示例。以上就是在R语言中使用贝叶斯网络进行建模和推断的基本步骤。通过构建贝叶斯网络模型并使用相应的函数,我们可以对变量之间的依赖关系进行建模、推断和预测。在建立了贝叶斯网络模型后,我们可以使用数据集来估计变量之间的条件概率。接下来,我们可以使用数据集来构建贝叶斯网络模型。除了进行推断,我们还可以使用贝叶斯网络模型进行预测。一旦我们获得了贝叶斯网络模型和条件概率表,我们就可以使用该模型进行推断。首先,我们需要安装并加载相关的R包。

CodeMaven的博客 1270

杰理外挂flash使用教程(三): 打包提示音到外部flash(2)

本教程详细介绍了提示音制作与程序配置的全流程规范。提示音制作要求包括:英文命名(8字符内)、单声道转换、标准目录结构(cpu/br23/tools/)及使用user_tone_g.bat脚本生成res.bin资源文件。程序配置需修改:1)启用NOR_FS文件系统;2)调整存储空间;3)配置外置Flash参数;4)增强下载脚本追加资源参数。测试阶段建议替换开机提示音验证功能,扩展开发可参考tone_player.c的索引播放逻辑。所有操作均配有图示说明,关键配置需修改对应头文件和脚本参数。

qq_42014563的博客 579

uni-app - 文本展开 / 收起折叠功能,支持自定义样式(当文本内容超出规定行数后,展开收起折叠的功能)兼容 H5 / App / 小程序且易用更容易修改的插件组件源码,超详细的示例代码及注释

uniapp实现文本的展开与收起功能,uniapp展开全部和收起,uniapp里文本的展开与收起,uniapp中文本内容超出规定行数后展开收起的处理,UNIAPP兼容h5、微信小程序多行文本展开或收起,uni-app中,文字超出隐藏并显示省略号(实现展开、收起全文),uni-app中文本过长-实现折叠与展开效果,中文本内容超出规定行数(字数)后展开收起的处理,超出部分...显示,uniapp适用于uniapp多行文本溢出显示...,多行文本展开或收起,uni-app-文本展开/收起折叠功能,支

🏆 前端领域优质创作者 5631

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

上一篇: 如何高效解决 Java 内存泄漏问题方法论
下一篇: 深入解析 Java GC 调优:减少 Minor GC 频率,优化系统吞吐
张彦峰ZYF
张彦峰ZYF 优质创作者: Java技术领域 优质创作者: Java技术领域 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄12年 7万+粉丝 663原创
评论 552
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张彦峰ZYF

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值