【10个OOM异常的场景以及对应的排查经验】

简介: 【10个OOM异常的场景以及对应的排查经验】


1. 场景描述:内存泄漏

应用程序执行期间不断分配内存,但未回收已分配的内存,导致应用程序耗尽可用内存并发生 OOM 异常。

排查经验:

1)使用 Java 内置工具 jmap 和 jstat 监测内存使用情况。

2)使用 Java 内置工具 jhat 分析内存转储文件,查找内存泄漏的对象。

3)使用工具如 Eclipse Memory Analyzer 和 VisualVM 进行内存分析,找出内存泄漏的根本原因。

2. 场景描述:过多线程

应用程序使用过多的线程,耗尽可用内存。

排查经验:

1)使用工具如 VisualVM 或 jconsole 监测线程数。

2)使用 Java 内置工具 jstack 分析线程转储文件,找出执行时间过长的线程,进行优化。

3)使用线程池等技术进行线程管理,限制线程池大小并拒绝过多的任务提交。

3. 场景描述:大量数据查询

应用程序执行大量的数据库查询操作,导致内存不足。

排查经验:

1)使用 SQL 优化技巧,减少查询次数。

2)使用缓存技术,将查询结果缓存到内存中。

3)使用分页技术,将查询操作分批进行。

4. 场景描述:大文件读取

应用程序在读取大文件时,将文件全部读取到内存中,导致内存不足。

排查经验:

1)使用流技术,将文件分块读取并处理。

2)使用内存映射文件技术,将文件映射到内存中操作。

3)使用缓存技术,将读取结果缓存到内存中。

5. 场景描述:高并发访问

应用程序在高并发访问时,每个请求都会创建一个线程或者进程,导致内存不足。

排查经验:

1)使用线程池技术,控制线程数量。

2)使用进程池技术,控制进程数量。

3)使用消息队列等技术进行削峰填谷,均衡请求分布。

6. 场景描述:大字符串操作

应用程序处理大字符串时,将字符串全部读入内存,导致内存不足。

排查经验:

1)使用流技术,将字符串分块读取并处理。

2)使用字符串压缩技术,减少字符串占用内存。

3)使用字符串切片技术,将字符串切分并处理。

7. 场景描述:大数据集合操作

应用程序处理大数据集合时,将数据集合全部读入内存,导致内存不足。

排查经验:

1)使用分块读取和分批处理技术,将数据集合分成多个子集合进行处理。

2)使用缓存技术,将部分数据集合缓存到内存中。

3)使用压缩技术,将部分数据集合压缩以减少内存占用。

8. 场景描述:大对象创建

应用程序创建大对象时,内存不足。

排查经验:

1)使用对象池技术,重用已经创建的对象。

2)使用懒加载技术,只在需要的时候创建对象。

3)使用分布式技术,将对象分散到多个节点中存储。

9. 场景描述:JVM 参数配置不合理

应用程序的 JVM 参数配置不合理,导致内存不足。

排查经验:

1)使用 JVM 参数监测工具,监测 JVM 参数配置。

2)根据应用程序的实际需求,调整 JVM 参数配置。

3)使用 JVM 内置工具 jstat 监测 JVM 内存使用情况。

10. 场景描述:JVM 内存资源不足

应用程序所在的服务器的内存资源不足,导致内存不足。

排查经验:

1)使用服务器监测工具,监测服务器内存使用情况。

2)增加服务器内存资源。

3)使用应用服务器等技术,将应用程序部署到多个服务器上,进行负载均衡。


相关文章
|
存储 缓存 监控
美团面试:说说OOM三大场景和解决方案? (绝对史上最全)
小伙伴们,有没有遇到过程序突然崩溃,然后抛出一个OutOfMemoryError的异常?这就是我们俗称的OOM,也就是内存溢出 本文来带大家学习Java OOM的三大经典场景以及解决方案,保证让你有所收获!
6111 0
美团面试:说说OOM三大场景和解决方案? (绝对史上最全)
|
5月前
|
监控 Java 测试技术
OOM排查之路:一次曲折的线上故障复盘
本文分享了在整合Paimon数据湖与RocksDB过程中,因内存溢出(OOM)引发的三次线上故障排查过程。通过SDK进行数据读写时,系统连续出现线程数突增、内存泄漏等问题,排查过程涉及堆内与堆外内存分析、JNI内存泄漏定位及架构优化。最终通过调整bucket数量、优化JVM参数及采用Flink写入Paimon,成功解决问题。文中详述了使用MAT、NMT、Arthas、async-profiler等工具的实战经验,为使用类似技术栈的开发者提供参考。
912 17
OOM排查之路:一次曲折的线上故障复盘
|
SQL 关系型数据库 MySQL
大厂面试官:聊下 MySQL 慢查询优化、索引优化?
MySQL慢查询优化、索引优化,是必知必备,大厂面试高频,本文深入详解,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验分享。
大厂面试官:聊下 MySQL 慢查询优化、索引优化?
|
前端开发 Java Spring
SpringBoot2.6.x 整合swagger3.0 报错Failed to start bean ‘documentationPluginsBootstrapper‘
org.springframework.context.ApplicationContextException: Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException
16134 3
SpringBoot2.6.x 整合swagger3.0 报错Failed to start bean ‘documentationPluginsBootstrapper‘
|
存储 架构师 Java
内存溢出原因与解决方案(4大主流方案详解)
本文详解内存溢出(OOM)的原因及解决方案。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
内存溢出原因与解决方案(4大主流方案详解)
|
存储 缓存 监控
深入JVM:解析OOM的三大场景,原因及实战解决方案
深入JVM:解析OOM的三大场景,原因及实战解决方案
|
Kubernetes 应用服务中间件 nginx
史上最全干货!Kubernetes 原理+实战总结(全文6万字,90张图,100个知识点)(上)
史上最全干货!Kubernetes 原理+实战总结(全文6万字,90张图,100个知识点)
52508 30
|
Java 测试技术 数据库
Spring事务传播机制(最全示例)
在使用Spring框架进行开发时,`service`层的方法通常带有事务。本文详细探讨了Spring事务在多个方法间的传播机制,主要包括7种传播类型:`REQUIRED`、`SUPPORTS`、`MANDATORY`、`REQUIRES_NEW`、`NOT_SUPPORTED`、`NEVER` 和 `NESTED`。通过示例代码和数据库插入测试,逐一展示了每种类型的运作方式。例如,`REQUIRED`表示如果当前存在事务则加入该事务,否则创建新事务;`SUPPORTS`表示如果当前存在事务则加入,否则以非事务方式执行;`MANDATORY`表示必须在现有事务中运行,否则抛出异常;
1209 4
Spring事务传播机制(最全示例)
|
传感器 人工智能 安全
数字孪生与公共安全:城市安全的新保障
数字孪生技术通过集成传感器、物联网、大数据和人工智能等技术,构建与真实世界对应的虚拟模型,实现实时监测、预警、智慧警务及跨部门合作,大幅提升城市公共安全管理水平,成为城市安全的新保障。
|
机器学习/深度学习 数据采集 算法
利用未标记数据的半监督学习在模型训练中的效果评估
本文将介绍三种适用于不同类型数据和任务的半监督学习方法。我们还将在一个实际数据集上评估这些方法的性能,并与仅使用标记数据的基准进行比较。
1007 8

热门文章

最新文章