HeapDump性能社区OOM问题排查实战案例精选合集

简介: HeapDump性能社区OOM问题排查实战案例精选合集

内存溢出(Out Of Memory,简称OOM)是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于能提供的最大内存。此时程序就运行不了,系统会提示内存溢出,有时候会自动关闭软件,重启电脑或者软件后释放掉一部分内存又可以正常运行该软件,而由系统配置、数据流、用户代码等原因而导致的内存溢出错误,即使用户重新执行任务依然无法避免。


JVM发生OOM异常可能是以下几种情况:Java堆溢出、虚拟机栈和本地方法栈溢出、方法区和运行时常量池溢出、本机直接内存溢出。这几种情况分别由不同的原因引起。


而在真实的业务场景中,环境往往更加复杂。今天,堆堆就带大家学习几个OOM问题排查实战案例,通过几位作者记录的真实案例,提醒自己避免踩坑,也顺便复习相关知识点。

 

1.体验了一把线上CPU100%及应用OOM的排查和解决过程

作者:阿飞云

https://heapdump.cn/article/1...


概述:

作者在收到应用异常告警后,登录了出现问题的服务器进行检查,在查看服务的日志时发现服务OOM了,紧接着使用Top命令查看系统中各个进程的资源占用状况,发现有一个进程CPU使用率达到了300%,然后查询该进程下所有线程的CPU使用情况并保存堆栈数据。根据前述操作,获取了出现问题的服务的GC信息、线程堆栈、堆快照等数据之后,使用HeapDump社区提供的XElephant进行分析,发现是InMemoryReporterMetrics引起的OOM,进一步发现出现问题的这个服务依赖的zipkin版本较低,将其升级后解决了问题。


亮点:虽然本文描述和解决的不是罕见的疑难杂症,但排查思路清晰,过程完整,还推荐了排查工具,适合新手阅读学习。

 

2.一次容器化springboot程序OOM问题探险

作者:侠梦

https://heapdump.cn/article/1...


概述:作者被告知一个容器化的java程序每跑一段时间就会出现OOM问题,首先查日志并未发现异常;然后通过JStat查看GC情况,发现GC情况正常但ByteBuffer对象占用最高(异常点1);接着通过JStack查看线程快照情况,发现创建了过多kafka生产者(异常点2);最后通过编写Demo程序验证猜想,确定问题是业务代码中循环创建Producer对象导致的。


亮点:排查过程清晰明了,工具使用娴熟,验证过程快速准确。

 

3.一次百万长连接压测 Nginx OOM 的问题排查分析

作者:挖坑的张师傅

https://heapdump.cn/article/4...


概述:

作者在一次百万长连接压测中,发现32C 128G的四台Nginx频繁出现OOM。发现问题后首先查看了 Nginx 和客户端两端的网络连接状态,首先怀疑是jmeter客户端处理能力有限,有较多消息堆积在中转的Nginx处,于是dump了nginx的内存查看,坚定了是因为缓存了大量的消息导致的内存上涨;随后查看了 Nginx 的参数配置,发现proxy_buffers 这个值设置的特别大;然后模拟了upstream 上下游收发速度不一致对Nginx内存占用的影响。最后将proxy_buffering 设置为 off并调小了 proxy_buffer_size 的值以后,Nginx的内存稳定了。


亮点:作者排查思路清晰,工具使用、参数调节十分娴熟,对底层原理和源码理解深刻,无论是经验还是态度都十分值得学习参考。

相关文章
|
8月前
|
监控 Java 调度
探秘Java虚拟机(JVM)性能调优:技术要点与实战策略
【6月更文挑战第30天】**探索JVM性能调优:**关注堆内存配置(Xms, Xmx, XX:NewRatio, XX:SurvivorRatio),选择适合的垃圾收集器(如Parallel, CMS, G1),利用jstat, jmap等工具诊断,解决Full GC问题,实战中结合MAT分析内存泄露。调优是平衡内存占用、延迟和吞吐量的艺术,借助VisualVM等工具提升系统在高负载下的稳定性与效率。
119 1
|
3月前
|
Arthas 监控 Java
JVM进阶调优系列(9)大厂面试官:内存溢出几种?能否现场演示一下?| 面试就那点事
本文介绍了JVM内存溢出(OOM)的四种类型:堆内存、栈内存、元数据区和直接内存溢出。每种类型通过示例代码演示了如何触发OOM,并分析了其原因。文章还提供了如何使用JVM命令工具(如jmap、jhat、GCeasy、Arthas等)分析和定位内存溢出问题的方法。最后,强调了合理设置JVM参数和及时回收内存的重要性。
|
4月前
|
Java 应用服务中间件 程序员
JVM知识体系学习八:OOM的案例(承接上篇博文,可以作为面试中的案例)
这篇文章通过多个案例深入探讨了Java虚拟机(JVM)中的内存溢出问题,涵盖了堆内存、方法区、直接内存和栈内存溢出的原因、诊断方法和解决方案,并讨论了不同JDK版本垃圾回收器的变化。
56 4
|
9月前
|
监控 算法 Java
JVM问题排查宝典
本文介绍了JVM问题排查与学习的经验,包括使用VisualVM监控本地JVM、通过GCViewer和gceasy分析GC日志、使用MAT分析OOM以及查询官方JVM参数。还提到了一个第三方网站HeapDump,提供简化版的JVM参数分析和生成服务,以快速生成适合特定环境的JVM配置。此外,推荐了几本深入学习JVM的书籍,并提供了进一步学习JVM问题的资源。
101 1
|
9月前
|
运维 监控 Java
【深入浅出JVM原理及调优】「搭建理论知识框架」全方位带你深度剖析Java线程转储分析的开发指南
学习JVM需要一定的编程经验和计算机基础知识,适用于从事Java开发、系统架构设计、性能优化、研究学习等领域的专业人士和技术爱好者。
124 5
【深入浅出JVM原理及调优】「搭建理论知识框架」全方位带你深度剖析Java线程转储分析的开发指南
|
9月前
|
缓存 监控 架构师
阿里面试:Java开发中,应如何避免OOM
在Java开发中,OutOfMemoryError(OOM)错误一直是令开发者头疼的问题,也是Java面试中出现核心频率很高的问题。 那么我们究竟怎么样才能够有效正确的管理内存,日常开发中究竟要注意哪些核心技巧来避免OOM错误。 本文将带大家一起学习10个避免OOM的实用小技巧,让大家在工作中能够有的放矢,避免OOM错误的飞来横祸。
132 1
|
存储 缓存 监控
JVM关键知识点整理,从入门到提高到实践
Java 虚拟机定义了各种在程序执行期间使用的运行时数据区域。这些数据区域有一些是在Java虚拟机启动时创建的,并在Java虚拟机退出时销毁,有一些数据区域是每个线程独有的,在线程创建时创建,在线程销毁时销毁,根据《Java虚拟机规范》的规定,Java虚拟机运行时所需要管理的数据区域主要如下图所示:
360 0
JVM关键知识点整理,从入门到提高到实践
|
Java Linux
第二季:10.假如生产环境出现CPU占用过高,请谈谈你的分析思路和定位【Java面试题】
第二季:10.假如生产环境出现CPU占用过高,请谈谈你的分析思路和定位【Java面试题】
151 1
阿里为了双十一,整理亿级JVM性能优化文档,竟被GitHub“抢开”
“随着云计算和微服务大行其道,现代 Java 程序需要适配的计算环境日益多样化。如何在云时代充分发挥Java的性能优势是所有 Java 程序员都必然要面对的挑战。
|
Arthas 监控 Java
【Java虚拟机】JVM诊断神器Arthas入门实操
【Java虚拟机】JVM诊断神器Arthas入门实操
【Java虚拟机】JVM诊断神器Arthas入门实操

相关实验场景

更多