【GC日志和OOM日志分析】JVM GC日志和OOM Dump文件分析
1 缘起
充电、充电、充电。
增加一些必备的知识,帮助后续使用。
2 配置JVM参数
为分析GC日志以及OOM相关信息,配置JVM参数,分为三个部分:
(1)堆内存,包括年轻代、最大堆内存;
(2)GC日志配置;
(3)OOM转存dump配置。
完整参数:
-Xmn10m -Xmx70m -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:./logs/gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:\data\jvm
-Xmn10m -Xmx70m -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:./logs/gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:\data\jvm
2.1 堆参数
参数 | 描述 |
---|---|
-Xmn10m | 年轻代分配10MB内存 |
-Xmx70m | 最大堆分配70MB内存,其中,最大堆内存=年轻代+老年代 |
2.2 GC日志参数
参数 | 描述 |
---|---|
-XX:+PrintGCDetails | 开启GC日志打印 |
-XX:+PrintGCDateStamps | GC日志日期戳,格式: 2024-10-05T20:26:21.145+0800: 234.514 |
-Xloggc:./logs/gc.log | 指定GC日志输出文件路径 |
2.3 OOM dump转储参数
参数 | 描述 |
---|---|
-XX:+HeapDumpOnOutOfMemoryError | 开启OOM转储Dump文件 |
-XX:HeapDumpPath=D:\data\jvm | 配置Dump文件路径 |
开启GC日志并写入到指定目录下,添加启动参数:
-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:./logs/gc.log
启动服务后,在日志文件gc.log中查看GC内容如下,这里开启了时间戳(PrintGCDateStamps)。
3 GC分析
GC分析其实是分析GC日志内容,了解当前JVM GC状态,主要包括GC频率、回收内存大小,通过这些信息可以了解JVM状态。
依据这些状态,为我们优化JVM(主要是堆内存)提供理论数据支持,这里主要是解析GC日志参数,并没有依据这些状态指导JVM调优。
GC日志:
3.1 YGC
YGC日志如下,Allocation Failure说明分配内存失败,需要内存回收。
PSYoungGen:年轻代内存回收,
以第一行数据为例,
2024-10-05T20:25:28.185+0800: 181.555: [GC (Allocation Failure) [PSYoungGen: 7424K->192K(8704K)] 65370K->58146K(70144K), 0.0024832 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
2024-10-05T20:25:28.185+0800: 181.555: [GC (Allocation Failure) [PSYoungGen: 7424K->192K(8704K)] 65370K->58146K(70144K), 0.0024832 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
首先分析日志内容,各信息分析如下:
YGC回收频率以及内存回收大小可以通过JConsole或者Visual VM可视化,可视化的原始数据来自于GC日志。
每分钟YGC3~4次,每次回收内存:如4256K-96K=4160K=4MB。
2.2 Full GC
FullGC发生的情况是:年轻代已不足以为新对象分配内存+老年代仍不足以为新对象分配内存,触发Full GC,同时清理年轻代和老年代内存,Full GC直接影响系统的稳定性,我们要最大限度地减少Full GC(依据实际情况而定)。
Full GC日志如下:
2024-10-05T20:26:33.546+0800: 246.916: [Full GC (Ergonomics) [PSYoungGen: 4096K->0K(7168K)] [ParOldGen: 60327K->48792K(61440K)] 64423K->48792K(68608K), [Metaspace: 73978K->73972K(1116160K)], 0.0804215 secs] [Times: user=0.12 sys=0.00, real=0.08 secs]
Full GC各部分信息如下:
在模拟的请求中,主动触发Full GC,日志如下,
由日志可知,Full GC有两种情况:Ergonomics和Allocation Failure,当发生Full GC时,如果无法释放出足够内存给新对象使用,会一直进行Full GC,并抛出OOM异常,OOM异常会在Error日志中。
OOM Error日志,通过OOM日志,我们仅可知道发生了OOM,而无法确定发生OOM的位置,需要通过Dump文件分析。
4 OOM分析
通过GC日志,我们仅能了解到发生了Full GC,并不能直接定位到引发Full GC的位置,
最终导致无法定位引发OOM的原因,
因此,配置OOM发生后转储Dump文件,通过分析OOM Dump文件寻找引发OOM的原因。
通过异常日志可以直接发现发生OOM。
配置OOM Dump转储:
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:\data\jvm
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:\data\jvm
4.1 OOM日志
当发生OOM时,日志中会给出异常日志,java.lang.OutOfMemoryError,
模拟OOM异常日志如下,配置OOM转储Dump文件,可以在指定的路径找到。
4.2 OOM Dump文件
通过Visual VM载入OOM Dump文件,文件后缀:hprof。
Visual VM载入hprof文件,步骤以及OOM信息如下:
通过OOM Error线程信息可以查看引发OOM的位置,位置信息如下,
这里的OOM信息是我在项目中模拟出来的,
位置是接口方法:testUserInfo,因此,我们可以分析这个接口的所有逻辑,找出OOM的原因,三类方案:
(1)增加年轻代和老年代内存;
(2)调整业务逻辑,优化数据拼装,减小内存占用;
(3)接口限流。
5 小结
(1)GC通过日志可以呈现的有:YGC和Full GC,其中,YGC中展示的信息中是新生代Eden区垃圾回收情况,并且Eden区和Survivor的比例是会发生变化的;Full GC展示的信息有新生代Eden区和老年代;
(2)OOM异常信息仅能提供发生了OOM,无法直接定位在哪里导致的OOM,需要通过Dump文件分析;
(3)配置GC日志和OOM转存参数:
参数 | 描述 |
---|---|
-XX:+PrintGCDetails | 开启GC日志打印 |
-XX:+PrintGCDateStamps | GC日志日期戳,格式: 2024-10-05T20:26:21.145+0800: 234.514 |
-Xloggc:./logs/gc.log | 指定GC日志输出文件路径 |
-XX:+HeapDumpOnOutOfMemoryError | 开启OOM转储Dump文件 |
-XX:HeapDumpPath=D:\data\jvm | 配置Dump文件路径 |
相关文章:

【GC日志和OOM日志分析】JVM GC日志和OOM Dump文件分析
1 缘起 充电、充电、充电。 增加一些必备的知识,帮助后续使用。 2 配置JVM参数 为分析GC日志以及OOM相关信息,配置JVM参数,分为三个部分: (1)堆内存,包括年轻代、最大堆内存; &a…...

【电路】1.1 实际电路和电路模型
1.1 实际电路和电路模型 科学理论的研究对象是现实世界背后的抽象世界,如: 数学中的 ∞ \infty ∞,经典力学中“质点”的概念,牛顿运动定律(如惯性定律,如果一个物体不受外力情况下,一直保持匀…...

Vue - 打包部署
vscode找到NPM脚本,点击build。 目录下出现dist目录则表示安装成功。 安装Nginxnginx: download 目录用途conf配置文件目录html静态资源文件目录logs日志文件目录temp临时文件目录 将刚刚打包好的文件放到html目录下。 点击nginx.exe,用localhost:默认…...

spring揭秘25-springmvc03-其他组件(文件上传+拦截器+处理器适配器+异常统一处理)
文章目录 【README】【1】文件上传与MultipartResolver【1.1】使用MultipartResolver进行文件上传【1.2】springmvc处理multipart多部件请求流程【1.3】使用springmvc上传文件代码实现(springmvc6.10版本): 【2】Handler与HandlerAdaptor&…...
springboot项目中属性的使用优先级;maven编译插件切换环境变量
概述 在项目部署时,相关的生产环境和测试环境是分开的,但是代码是同一套; 所以一般会有多套变量; 项目中默认变量(一般是测试环境) 线上变量(线上数据较敏感,一般也不会放在代码中&…...

【Qt】控件概述 (1)—— Widget属性
控件概述 1. QWidget核心属性1.1核心属性概述1.2 enable1.3 geometry——窗口坐标1.4 window frame的影响1.4 windowTitle——窗口标题1.5 windowIcon——窗口图标1.6 windowOpacity——透明度设置1.7 cursor——光标设置1.8 font——字体设置1.9 toolTip——鼠标悬停提示设置1…...

(笔记)第三期书生·浦语大模型实战营(十一卷王场)–书生基础岛第3关---浦语提示词工程实践
学员闯关手册:https://aicarrier.feishu.cn/wiki/ZcgkwqteZi9s4ZkYr0Gcayg1n1g?open_in_browsertrue 课程视频:https://www.bilibili.com/video/BV1cU411S7iV/ 课程文档: https://github.com/InternLM/Tutorial/tree/camp3/docs/L1/Prompt 关…...
OpenCV视频I/O(11)视频采集类VideoCapture之设置视频捕获设备的属性函数 set()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 VideoCapture 中设置一个属性。 在OpenCV中,cv::VideoCapture::set() 函数用于设置视频捕获设备的属性。这些属性可以包括分辨率、…...

数据结构之树(3)
一、森林和树的转换 重要! 树->二叉树 由于孩子兄弟链式存储和二叉树链式存储本质相同,故树可转换为二叉树。 森林->二叉树 森林:m棵互不相交的树的集合 森林->树 树->二叉树 森林中各个树的根节点之间视为兄弟关系 二、树…...

螺蛳壳里做道场:老破机搭建的私人数据中心---Centos下docker学习02(yum源切换及docker安装配置)
2 前期工作 2.1 切换yum源并更新 删除/etc/yum.repos.d/原有repo文件,将Centos-7.repo库文件拷贝到该目录下。 然后清楚原有缓存yum clean all 生成新的缓存yum makecache 更新yum update –y 然后再确认/etc/yum.repos.d/不会有其他库文件,只留下…...

强化学习笔记之【Q-learning算法和DQN算法】
强化学习笔记(一)——Q-learning和DQN算法核心公式 文章目录 强化学习笔记(一)——Q-learning和DQN算法核心公式前言:Q-learning算法DQN算法 前言: 强化学习领域,繁冗复杂的大段代码里面&#…...
面试经验02
嵌入式简历制作指南与秋招求职建议 引言 秋招季即将到来,许多同学开始准备求职简历。无论你是考研失利准备就业,还是即将毕业寻找实习,一份优秀的简历都是求职的敲门砖。今天,我们将讨论如何制作嵌入式领域的求职简历࿰…...
分层图 的尝试学习 1.0
分层图: 分层图的最短路: 又叫做 扩点最短路。不把实际位置看做是图上的点,而是把实际位置及其状态的组合,(一个点有若干的状态,所以一个点会扩充出来若干点)看做是图上的点,然后搜索…...
第 31 章 javascript 之 XPath
第 31 章 XPath 1.IE 中的 XPath 2.W3C 中的 XPath 3.XPath 跨浏览器兼容 XPath 是一种节点查找手段,对比之前使用标准 DOM 去查找 XML 中的节点方式,大大降低了查找难度,方便开发者使用。但是,DOM3 级以前的标准并没有就 XPa…...

JavaScript中的高阶函数
高阶函数 所谓高阶函数,就是操作函数的函数,它接收一个或多个函数作为参数,并返回一个新函数: 来看一个mapper()函数,将一个数组映射到另一个使用这个函数的数组上: 更常见的例子,它接收两个函…...

Qt6.7开发安卓程序间接连接到MySQL的方法
本文主要描述一种通过间接的方法,使得Qt开发的安卓程序可以直连到Mysql数据库的方法。本文章的方案是通过JAVA代码去连接MySQL数据库,然后C代码去调用JAVA的方法,从而实现QT开发的安卓程序去直连到MySQL数据库。 本文使用 JDBC 结合 JNI&…...

ROW_NUMBER
How to rewrite a query which uses the ROW_NUMBER() window function in versions 5.7 or earlier before window functions were supported e.g., SELECT ROW_NUMBER() OVER (PARTITION BY fieldA) AS rownum, myTable.* FROM myTable; index 用不上的 Solution Assuming…...
Docker技术
目录 Docker的基本概念 Docker的核心原理 Docker的使用场景 Docker的优点 Docker的挑战 为什么使用 环境一致性 快速启动和部署 资源利用率高 支持微服务架构 持续集成与持续交付(CI/CD) 依赖管理 简化部署流程 高效资源管理 生态系统丰富…...

中小企业做网站需要考虑哪些因素?
中小企业在建设网站时,需要考虑的因素有很多。以下是一些主要考虑因素的介绍: 明确建站目的:中小企业需要明确自己建立网站的目的。是为了展示企业形象、推广产品,还是提供客户服务?不同的目的将决定网站的设计和功能…...

【d60】【Java】【力扣】509. 斐波那契数
思路 要做的问题:求F(n), F(n)就等于F(n-1)F(n-2),要把这个F(n-1)F(n-2)当作常量,已经得到的值, 结束条件:如果是第1 第2 个数字的时候,没有n-1和n-2,所以…...

Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...