OOM问题排查和解决

JVM OOM问题排查与解决思路 JVM OOM 是一个复杂但常见的问题,它可能出现在堆内存、永久代/元空间、栈内存或直接内存等区域。排查 OOM 的关键在于启用诊断选项(如堆转储和 GC 日志)、分析错误日志和堆转储文件、检查垃圾回收日志。解决 OOM 的方法包括增加内存、优化代码、调优垃圾回收器参数和管理外部资源。持续监控和预警机制可以有效预防 OOM 问题的发生。 阅读详情

最近写了个 python 通过 Jpypt 调用 kotlin 编译出的 jar,遇到了 jvm OOM (内存溢出)问题,记录分享一下排查解决过程

使用 gc log 查看内存和堆使用情况

jvm配置

jvm 配置以下:

-Xlog:gc*:file=gc.log:tags,uptime,time,level

运行后会在当前目录生成gc.log文件

log查看技巧

一行典型的 GC 日志可能长这样,主要关注第四行堆内存大小变化:

[0.348s][info][gc,start      ] GC(0) Pause Young (Normal) (G1 Evacuation Pause)
[0.348s][info][gc,heap       ] GC(0) Eden regions: 10->0 Survivors: 1->1 Old: 0->0
[0.349s][info][gc,metaspace  ] GC(0) Metaspace: 10504K->10504K(10752K)
[0.349s][info][gc           ] GC(0) Pause Young (Normal) 5M->1M(20M) 1.234ms
  • [0.348s]:这是 uptime,表示从 JVM 启动到此 0.348 秒时发生的事件。
  • [info]:日志级别。你也可以在参数里打开 debug 或 trace,得到更详细的内部信息。
  • [gc,start]:子系统标签,这里是 GC 开始时的消息。
  • GC(0):第 0 次 GC。后续 GC 会依次编号。
  • Pause Young (Normal) (G1 Evacuation Pause):触发原因和 GC 类型。
  • 5M->1M(20M):GC 之前堆中可用的大小变化:回收前 5 MB,回收后 1 MB,堆最大 20 MB。
  • 1.234ms:这次 GC 的暂停时长。

使用 Jconsole 和 Jcmd 排查OOM 问题

jvm配置

jconsole

启动 jvm 需要配置以下:

"-Dcom.sun.management.jmxremote",
"-Dcom.sun.management.jmxremote.port=9010",
"-Dcom.sun.management.jmxremote.local.only=false",
"-Dcom.sun.management.jmxremote.authenticate=false",
"-Dcom.sun.management.jmxremote.ssl=true",
"-Djdk.attach.allowAttachSelf=true",

连接进程

选择 local 进程,名字没有配置就是空字符串的那个,提示 ssl 弹窗选择 “不安全的连接”

查看堆内存用量变化曲线

查看各个类的实例数量及大小
  • 方式一:

参数输入空字符串即可,但这里我实测好像不能输入参数,所以使用下面的方式二

  • 方式二

jcmd [your_pid] GC.class_histogram

ok, 解决吧

[线上问题排查]JVM OOM问题如何排查和解决 接下来就是通过查看代码来解决问题了,我们发现,我们自定义了一个BeanValidator,封装了Hibernate的Validator,然后在validate方法中,通过Validation.buildDefaultValidatorFactory().getValidator()初始化一个Validator实例,通过分析发现这个实例化的过程比较耗时。以上,本文介绍了如何排查线上服务器CPU使用率过高的问题,如果大家感兴趣,后面可以再介绍一些关于LOAD飙高、频繁GC等问题的排查手段。 阅读详情

相关推荐

记一次压测环境OOM问题排查与解决

测试同学在管理后台上传一张3M的图片时,发现界面停留在卡死的状态,就喊我排查下。听到这个后首先要做的就是看这个管理后台服务的日志。 从日志里清楚的看到,居然是可恶的堆内存溢出。 排查堆内存溢出过程 还好我们jvm的启动参数里有配置在发生OOM时dump内存快照 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/app/sc-manage/logs 我登录到OOM的这台机器把内存快照文件下载到本地,准备用MAT来分析下。 MAT是什么 MAT是一款强大的

bazhuayu_1203的博客 696

JVM 内存调优:G1GC 参数配置与日志分析

G1GC(Garbage-First Garbage Collector)是 JDK 9 及以后版本的默认垃圾收集器,适用于大内存(>4GB)场景。通过参数精细化调整与日志分析,G1GC 可稳定实现亚秒级停顿,适用于高并发服务场景。G1GC 会动态调整堆分区以满足该目标,但实际值取决于对象分配速率。(Pause Prediction Model)实现低延迟。:频繁 Full GC(>1 次/小时)(单位毫秒,默认 200ms)(Heap Region)和。

2501_93877690的博客 684

【分析 GClog 的吞吐量和停顿时间、heapdump 内存泄漏分析】

🌟我是廖志伟,一名Java开发工程师、Java领域优质创作者、优快云博客专家、51CTO专家博主、阿里云专家博主、清华大学出版社签约作者、产品软文专业写手、技术文章评审老师、问卷调查设计师、个人社区创始人、开源项目贡献者。🌎跑过十五公里、🚀徒步爬过衡山、🔥有过三个月减肥20斤的经历、是个喜欢躺平的狠人。

我是Java程序员廖志伟,感谢朋友们的支持! 635

JVM调优的GC日志观察解读

JVM调优的GC日志观察解读

zhk 1167

Ansys Electronics Desktop仿真——HFSS线圈寄生电阻,电感

Ansys Electronics Desktop仿真——HFSS线圈寄生电阻,电感

冲击10w 1万+

Cesium中实现GPU计算的泥石流地形侵蚀

通过模拟分析,可以提前识别可能发生泥石流的区域,为防灾减灾提供依据,及时发布预警,避免或减少人员伤亡和财产损失。:在建设公路、桥梁、水库等基础设施时,通过泥石流模拟分析,可以预测泥石流可能对这些设施的影响,帮助工程设计者采取合适的防护措施,确保设施的安全性。:模拟分析有助于为灾后救援工作提供科学依据,确定受灾区域的范围、救援难度等,为救援队伍制定合理的行动方案,提升救援效率。:泥石流是山区常见的地质灾害之一,通过模拟分析可以评估某一地区发生泥石流的风险,指导土地使用规划、人口迁移等决策。

weixin_43481439的博客 1320

线上JVM OOM问题,如何排查和解决?

JVM OOM 是一个复杂但常见的问题,它可能出现在堆内存、永久代/元空间、栈内存或直接内存等区域。排查 OOM 的关键在于启用诊断选项(如堆转储和 GC 日志)、分析错误日志和堆转储文件、检查垃圾回收日志。解决 OOM 的方法包括增加内存、优化代码、调优垃圾回收器参数和管理外部资源。持续监控和预警机制可以有效预防 OOM 问题的发生。希望这篇文章能帮助你在面试中更好地回答 OOM 相关问题,也能在实际工作中解决类似问题。如果你在工作中也遇到过 OOM 问题,欢迎在评论区留言,我们一起交流经验。

weixin_66137383的博客 2755

Palantir的Ontology:从静态知识图谱到动态业务引擎的跃迁

本文探讨了Palantir的Ontology技术如何将静态知识图谱升级为动态业务引擎。通过引入函数和行动作为核心元素,Ontology实现了业务逻辑的自动化响应与执行,显著提升物流、能源等领域的运营效率。文章详细解析了其混合存储引擎、状态监听网络等关键技术设计,并对比展示了传统架构与Ontology架构的业务价值差异。

weixin_42570296的博客 200

JVM OOM问题如何排查和解决

在 Java 开发中,**JVM OOM(OutOfMemoryError)**问题通常是指程序运行时,JVM 无法为对象分配足够的内存空间,导致发生内存溢出的错误。这个问题往往和内存的配置、内存泄漏、或者资源过度使用等因素有关。JVM 中的 OOM 错误主要包括以下几种类型:排查 OOM 问题可以从以下几个角度入手:通过 JVM 参数 来查看堆内存的大小和使用情况。常用的 JVM 参数有:通过这些参数可以定位内存是否足够,堆内存是否被频繁的垃圾回收占满。可以通过一些可视化的工具来监控 JVM 的内存使用情

有时间就写写代码 1413

不止于HTTPS请求:用VS2022编译的libcurl玩转文件上传和代理设置

本文详细介绍了如何使用VS2022编译的libcurl库实现文件上传和高级代理配置。通过实战代码示例,展示了多部分表单上传、二进制数据上传以及各种代理设置技巧,帮助C++开发者提升网络编程能力。

weixin_28595749的博客 206

从零开始了解数据采集(五)——工业通信协议:数据采集的“语言”桥梁

数据采集常用的通信协议有哪一些?看完这篇你就了解了~

李恒的博客 4057

JVM OOM(OutOfMemoryError)问题排查与解决

JVM OOM问题是Java开发中常见且棘手的问题,但通过合理的内存管理、GC优化和代码调优,开发者可以有效防止OOM的发生。在实际生产环境中,OOM问题的排查需要结合日志、Heap Dump和监控工具,针对不同类型的OOM采取不同的解决方案。通过GC日志,我们可以判断内存回收的效率,查看Full GC和Minor GC的频率,是否存在GC Overhead Limit Exceeded等问题。GC日志是排查OOM问题的核心工具之一。OOM异常可以发生在不同的内存区域,每种OOM异常都代表不同的内存问题。

lssffy的博客 4009

ThingsBoard教程(十六):RPC部件的使用

前言 各位读者好,截止目前,ThingsBoard系列文章已经做了十篇,分别是 ThingsBoard教程(一):ThingBoard介绍及安装 ThingsBoard教程(二):租户,租户配置,部件组模块的使用 ThingsBoard教程(三):系统设置模块的使用 ThingsBoard教程(四):规则链简介与操作 ThingsBoard教程(五):客户,资产管理 ThingsBoard教程(六):设备管理 ThingsBoard教程(七):模拟设备遥测 ThingsBoard教程(八):自定义UI T

知无涯 4576

深度剖析Java线上OOM问题排查与解决之道

摘要: 本文深入探讨Java OOM(内存溢出)问题的排查与解决。首先解析OOM的成因及JVM内存区域(堆、元空间、栈、直接内存)的潜在风险点,随后提供系统性排查策略:通过JVM参数配置(如堆转储、GC日志)、错误日志分析、MAT工具定位内存泄漏等方法精准定位问题。解决方案包括调整内存参数、优化代码(释放资源/避免大对象)、选择合适GC算法,并强调外部资源管理的重要性。最后结合实战案例,演示如何通过流式处理优化大数据场景下的堆内存不足问题。(150字) 关键词: Java OOM、内存泄漏、堆转储、GC调优

没事学AI的博客 1045

液滴/液膜蒸发过程—in文件模拟-后处理分析-Ovito/Python绘图

液滴/液膜蒸发过程—in文件模拟-后处理分析-Ovito/Python绘图

Rockyoung 3320

fanuc机器人KAREL中 函数的应用

本次课程讲解编程的思路。很多的同学都玩过积木,一个一个的模块逐渐累积起来,通过彼此之间的相互联系,最终形成一个完整的整体。其实编程也是这样。 将一个对象根据其特点进行模块化拆分,尤其是一些特点非常相似的内容,将其变成一个模块。然后通过传递参数,实现不同的功能,这就是模块化编程。

haier123888的博客 2743

Java OOM 问题排查与解决方法

OOM 问题实际上就是 Java 的,即内存溢出。OOM 出现的原因有多种,不仅包括堆内存溢出(如),还可能是元空间内存不足,或者程序运行时间过长导致的内存溢出。自定义缓存或缓存使用未及时清理可能导致 OOM。例如,实现用户登录的session管理时,用户登录会在内存中放一份session,如果用户退出时没有及时清理这些session缓存,系统运行时间久了可能会导致大量无用的session占用内存,最终导致内存溢出。解决方法是在用户退出时及时清理session缓存,或者设置缓存的过期时间。

m0_57836225的博客 1991

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【极客日常】分享下OOM问题排查解决的实战经验

在AI助手时代,OOM的问题排查方法论已经非常烂大街,但在实际工作中,即便我们通过很多方式查到了OOM问题,但修复还是要我们自己手动修。OOM会导致服务不可用、系统不稳定等问题,会直接影响用户体验,所以从稳定性问题解决优先级来看,是属于比较高的。今天笔者就简单从自身经验出发,聊一下OOM问题的排查和解决经验。从事情上来看,轻排查,重解决。排查的手段很多,但怎么解决,就需要我们自己根据实际情况来决策。

HiKariのTechLab 562

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

线上问题排查:JVM OOM问题如何排查和解决

OutOfMemoryError (以下缩写为oom)是java 中最常见的内存问题,也是一旦影响就非常大的问题。oom出现的原因就是内存不够用了,GC虽然在回收,然后回收的速度赶不上新对象分配了或者根本就没有对象可以被回收,就会抛出OutOfMemoryError 错误。 在这里笔者把问题发现-问题止血-问题分析-问题规避的闭环思路来带领读者了解整个解决方案。

Javatutouhouduan的博客 1689

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

OOM问题预防和排查内存泄漏及解决方法

理解了这个算法我们就理解了为啥 MySQL 躺着也能中枪了,因为它的体积总是最大(一般来说它在系统上占用内存最多),所以如果 Out of Memeory (OOM) 的话总是不幸第一个被 kill 掉。 一、什么是OOM,为什么会OOM 二、OOM问题排查 三、OOM问题解决方法

kuodehai的专栏 9524

【Java】排查Java OOM问题:从定位到解决的全链路指南

Java内存溢出(OOM)排查流程

啊松同学的博客 2345

FastJson 读取超大json文件引起OOM问题排查与解决

背景 最近工作有一个需求,需要读取一个约2GB的json文件(存储了约3千万个json对象的集合),解析其中的每个json对象,并进行一些数据转换,最后把转换后的json对象存储到es中。json文件格式大概是这样的: [ { lng: 116.22 lat: 22.00, count: xxxx }, { lng: 116.22 lat: 22.00, count: xxxx }

Zhenxue_Xu的博客 9604

Full gc频繁如何解决,遇到OOM问题如何排查

Full GC 触发Full gc的表现形式 CPU满载告警 API响应时间过长 内存反复波动 fullgc告警 常用的排查命令 jps: 查看本机java进程 jstack: 打印线程的栈信息,制作线程dump文件 jmap:打印内存映射信息,制作堆dump文件 jstat:性能监控工具 jhat:内存分析工具,用于解析堆dump文件并以适合人阅读的方式展示出来 jconsole: 简易的jvm可视化工具 Full gc发生的原因 System.gc() 方法调用 老年代空间不足,新生代对象转入以及

weixin_38813363的博客 3577

Java 内存溢出(OOM)问题的排查与解决

在 Java 开发中,内存溢出(OutOfMemoryError,简称 OOM)是一个常见且棘手的问题。相比于数组越界、空指针等业务异常,OOM 问题通常更难定位和解决。本文将通过一次线上内存溢出问题的排查过程,分享从问题表现到最终解决的完整思路,希望能为遇到类似问题的开发者提供参考

专注Java和MySQL领域知识分享 3016
上一篇: Compose进阶——在非Compose作用域调用Compose函数
LiePy
博客等级 码龄7年 1927粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值