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的内存稳定了。


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

相关文章
|
1月前
|
监控 算法 Java
JVM问题排查宝典
本文介绍了JVM问题排查与学习的经验,包括使用VisualVM监控本地JVM、通过GCViewer和gceasy分析GC日志、使用MAT分析OOM以及查询官方JVM参数。还提到了一个第三方网站HeapDump,提供简化版的JVM参数分析和生成服务,以快速生成适合特定环境的JVM配置。此外,推荐了几本深入学习JVM的书籍,并提供了进一步学习JVM问题的资源。
27 1
|
1月前
|
运维 监控 Java
【深入浅出JVM原理及调优】「搭建理论知识框架」全方位带你深度剖析Java线程转储分析的开发指南
学习JVM需要一定的编程经验和计算机基础知识,适用于从事Java开发、系统架构设计、性能优化、研究学习等领域的专业人士和技术爱好者。
63 5
【深入浅出JVM原理及调优】「搭建理论知识框架」全方位带你深度剖析Java线程转储分析的开发指南
|
1月前
|
存储 分布式计算 数据处理
Alibaba最新神作!耗时182天肝出来1015页分布式全栈手册太香了
到底什么是分布式?这个话题一直以来就在各大平台论坛上被热议。一千个读者里面就有一千个哈姆雷特。官方这边给出的结论是:分布式就是将相同或相关的程序运行在多台计算机上,从而实现特定目标的一种计算方式。而从分布式技术的起源来看,随之诞生的分布式系统就是用更多的机器,处理更多的数据和更复杂的任务。
|
6月前
|
消息中间件 缓存 算法
阿里技术专家,用257页文档分享多线程高并发性能调试经验
多线程和高并发这两大块,现在面试问得越来越多,也是相对一个初级的程序员向中高级迈进的必须要踏过的一个坎儿。
|
8月前
|
Java 程序员 双11
阿里为了双十一,整理亿级JVM性能优化文档,竟被GitHub“抢开”
“随着云计算和微服务大行其道,现代 Java 程序需要适配的计算环境日益多样化。如何在云时代充分发挥Java的性能优势是所有 Java 程序员都必然要面对的挑战。
|
11月前
|
Java 关系型数据库 MySQL
“阿里爸爸”上新!《2023阿里Java性能调优手册(实战参考)》
现在行业变化太快,裁员缩招屡见不鲜,而应对的方法即是--核心竞争力。打磨自己的专业技能,成为本职行业的前百分之二十,行业再怎么变动,你总能安身立命。 在任何一个细分领域内,成为前1%,拼的是天赋,是智力决定的。但若仅仅想要成为20%,成为被二八定律眷顾的那波人,拼的就是努力了,没有学霸的智商,得有学渣不要脸的劲!!
|
Arthas 监控 Java
【Java虚拟机】JVM诊断神器Arthas入门实操
【Java虚拟机】JVM诊断神器Arthas入门实操
【Java虚拟机】JVM诊断神器Arthas入门实操
|
监控 数据可视化 安全
pprof性能调优实战|青训营笔记
本次课程讲解大体分为两个部分:讲述高质量编码的规范和性能调优实战,这篇文章侧重于复现使用pprof工具性能调优的实践过程,而第一部分则希望大家各自归纳总结。
180 0
pprof性能调优实战|青训营笔记
|
存储 监控 前端开发
监控阅读及使用|学习笔记
快速学习监控阅读及使用
188 0
监控阅读及使用|学习笔记
|
Arthas 监控 Java
【JVM性能分析】「Arthas技术专题」安装入门及基础指令介绍
【JVM性能分析】「Arthas技术专题」安装入门及基础指令介绍
198 0
【JVM性能分析】「Arthas技术专题」安装入门及基础指令介绍

热门文章

最新文章