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


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

相关文章
|
3月前
|
前端开发 数据安全/隐私保护 容器
程序与技术分享:DirectUI的初步分析
程序与技术分享:DirectUI的初步分析
16 0
|
3月前
|
监控 算法 Java
JVM调优-简介(一)
JVM调优-简介(一)
26 0
|
4月前
|
运维 监控 Java
【深入浅出JVM原理及调优】「搭建理论知识框架」全方位带你深度剖析Java线程转储分析的开发指南
学习JVM需要一定的编程经验和计算机基础知识,适用于从事Java开发、系统架构设计、性能优化、研究学习等领域的专业人士和技术爱好者。
88 5
【深入浅出JVM原理及调优】「搭建理论知识框架」全方位带你深度剖析Java线程转储分析的开发指南
|
9月前
|
消息中间件 缓存 算法
阿里技术专家,用257页文档分享多线程高并发性能调试经验
多线程和高并发这两大块,现在面试问得越来越多,也是相对一个初级的程序员向中高级迈进的必须要踏过的一个坎儿。
|
11月前
|
Java 程序员 双11
阿里为了双十一,整理亿级JVM性能优化文档,竟被GitHub“抢开”
“随着云计算和微服务大行其道,现代 Java 程序需要适配的计算环境日益多样化。如何在云时代充分发挥Java的性能优势是所有 Java 程序员都必然要面对的挑战。
|
12月前
|
设计模式 运维 Java
硬核!阿里P8耗时3月撰写700页性能优化笔记:程序优化提升了7倍
前言 在我看来,Java性能优化是Java进阶的必经之路,性能优化作为Java工程师必备的一种技术,一直热度不减。 Java是目前软件开发领域中使用最广泛的编程语言之一。Java应用程序在许多垂直领域(银行、电信、医疗保健等)中都有广泛使用。帮助开发者通过专注于JVM内部,性能调整原则和最佳实践,以及利用现有监测和故障诊断工具,来提升应用程序在商业环境中的性能。
|
存储 缓存 Linux
十八、Linux性能优化实战学习笔记- 内存泄漏了,我该如何定位和处理?
当进程通过 malloc() 申请虚拟内存后,系统并不会立即为其分配物理内存,而是在首次访问时,才通过缺页异常陷入内核中分配内存.对应用程序来说,动态内存的分配和回收,是既核心又复杂的一个逻辑功能模块。管理内存的过程中,也很容易发生各种各样的“事故”.
108 0
|
监控 数据可视化 安全
pprof性能调优实战|青训营笔记
本次课程讲解大体分为两个部分:讲述高质量编码的规范和性能调优实战,这篇文章侧重于复现使用pprof工具性能调优的实践过程,而第一部分则希望大家各自归纳总结。
211 0
pprof性能调优实战|青训营笔记
|
Arthas 监控 Java
【JVM性能分析】「Arthas技术专题」安装入门及基础指令介绍
【JVM性能分析】「Arthas技术专题」安装入门及基础指令介绍
222 0
【JVM性能分析】「Arthas技术专题」安装入门及基础指令介绍
|
Arthas 监控 数据可视化
实战!使用 阿里 Arthas 工具分析 CPU 飙高
实战!使用 阿里 Arthas 工具分析 CPU 飙高
实战!使用 阿里 Arthas 工具分析 CPU 飙高