码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【10个OOM异常的场景以及对应的排查经验】


    文章目录

    • 1. 场景描述:内存泄漏
    • 2. 场景描述:过多线程
    • 3. 场景描述:大量数据查询
    • 4. 场景描述:大文件读取
    • 5. 场景描述:高并发访问
    • 6. 场景描述:大字符串操作
    • 7. 场景描述:大数据集合操作
    • 8. 场景描述:大对象创建
    • 9. 场景描述:JVM 参数配置不合理
    • 10. 场景描述:JVM 内存资源不足

    在这里插入图片描述

    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)使用应用服务器等技术,将应用程序部署到多个服务器上,进行负载均衡。

  • 相关阅读:
    【刷题记录⑧】Java工程师丨字节面试真题(二)
    深度学习笔记Week3
    实践 | 大型基金管理公司数据脱敏体系建设
    操作系统考研笔记
    如何创建像 Quora 这样的问答网站:技术堆栈、用户获取等
    在opencv OpenCV中打开相机摄像头,用分水岭算法实时实现图像的分割与提取
    解决selenium加载网页过慢影响程序运行时间的问题
    Spring Data JPA 之 JpaSpecificationExecutor 的实现原理
    第六章:Springmvc事务管理和配置文件xml详解和七大事务和注解@Transactional
    数据结构(一)线性表(模板实现)
  • 原文地址:https://blog.csdn.net/java_wxid/article/details/133184288
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号