当前位置: 首页 > news >正文

OOM问题排查和解决

问题

java.lang.OutOfMemoryError: Java heap space

排查

排查手段

  1. jmap命令

jmap -dump,format=b,file=<file-path> <pid>

比如 jmap -dump:format=b,file=./heap.hprof 44532

  1. 使用JVisualVM工具: JVisualVM是一个图形界面工具,它可以帮助监控和分析Java应用程序。通过JVisualVM可以生成堆转储。
  2. 设置HeapDumpOnOutOfMemoryError: 在运行Java应用程序时,可以设置JVM参数-XX:+HeapDumpOnOutOfMemoryError-XX:HeapDumpPath=<file-path>,这样当JVM遇到内存溢出错误时,会自动生成堆转储文件。

比如

-Xmx60m -Xms60m -XX:NewRatio=1 -XX:MaxTenuringThreshold=3 -XX:SurvivorRatio=6 -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath="D:/heap-dump.hprof"


参数解释:
-XX:NewRatio=1  老年代: 新生代是1:1 也就是各30MB 正常为2,老年代40 新生代20
-XX:MaxTenuringThreshold=3  晋升老年代的阈值
-XX:SurvivorRatio=6  eden:from:to = 6:1:1

堆 Dump 文件是一个二进制文件,记录了堆内存中对象的详细信息,包括对象的类型、大小、引用关系等。

dump文件分析

  1. 使用内存分析工具
    1. VisualVM:连接到JVM进程,查看内存使用情况,分析内存泄漏。
    2. Eclipse Memory Analyzer (MAT):分析堆转储文件,找出内存泄漏的根源。

jvisualvm 没法识别, 需要用到 MAT(注意要和自己的JDK版本对应上,否则会出现MAT软件无法启动的问题)

或者直接用 VisualVM

知道OOM时刻的 内存情况就可以针对性的分析和调整。

相关文章:

  • Java工厂模式解析:灵活对象创建的实践指南
  • Java LinkedList深度解析:双向链表的实现艺术与实战指南
  • 【Python爬虫】简单介绍
  • 16bit转8bit的常见方法(图像归一化)
  • 深入理解浏览器的 Cookie:全面解析与实践指南
  • UNITY 屏幕UI自适应
  • Ubuntu下解压ZIP压缩文件出现中文乱码问题的综合解决方案
  • python提升图片清晰度
  • 【学习】对抗训练-WGAN
  • RTT添加一个RTC时钟驱动,以DS1307为例
  • C语言超详细指针知识(三)
  • Java设计模式实战:装饰模式在星巴克咖啡系统中的应用
  • 【JavaScript】二十、电梯导航栏的实现
  • C++之二叉搜索树
  • arcgis几何与游标(1)
  • 【NLP】 自然语言处理笔记
  • Spring-AI-alibaba 结构化输出
  • 技术视界 | 人形机器人运动控制框架详解:解锁智能机器人的“灵动”密码
  • 如何使用maxscale实现mysql读写分离
  • Java 反序列化之 XStream 反序列化
  • 特写|“三峡千古情”出圈,一场演出给宜昌留下更多游客
  • 人民日报开新栏,冼星海之女追忆父亲创作《黄河大合唱》
  • 更好发挥汽车产业在扩投资促消费方面的带动作用!陈吉宁调研上海车展
  • 七大外贸省市,靠什么撑起一季度的出口?
  • 最高法报告点名“夜郎古酒”商标侵权案:促成当事人握手言和
  • 世界史圆桌|16-18世纪的跨太平洋贸易