JVM虚拟机(九)如何开启 GC 日志

目录

    • 一、引言
    • 二、开启 GC 日志
    • 三、解析 GC 日志
    • 四、优化建议

一、引言

在 Java 应用程序的运行过程中,垃圾收集(Garbage Collection,简称 GC)是一个非常重要的环节。GC 负责自动管理内存,回收不再使用的对象所占用的内存空间。为了了解 GC 的行为和性能,我们通常需要开启 JVM 的 GC 日志功能,收集并分析 GC 日志数据。


二、开启 GC 日志

Java 项目中,默认情况下 GC 日志功能是关闭的,有多种方法能够开启 GC 的日志功能,使用 -verbose:gc-XX:+PrintGC 都能创建基本的 GC日志(这两个日志表示实际上互为别名) ,但是使用 -XX:+PrintGCDetails 标志会创建更详细的 GC 日志。

先提供一个比较通用的开启日志方式供参考:

java -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=14 -XX:GCLogFileSize=20M -XX:+PrintHeapAtGC -XX:+HeapDumpOnOutOfMemoryError -Xloggc:springboot-demo-gc-%t".log" -jar springboot-demo.jar
  • -XX:+PrintGCDetails:打印更详细的 GC 日志信息,包括各个内存区域的使用情况、GC 的触发原因等。
  • -XX:+PrintGCTimeStamps:打印 GC 发生的时间戳。(以基准时间的形式)
  • -XX:+PrintGCDateStamps:打印 GC 发生的时间戳。(以标准时间的形式,如:2024-04-13T17:35:04.859+0800)
  • -XX:+UseGCLogFileRotation:启用 GC 日志文件的自动轮转功能,维持日志目录中的日志文件在一定的数目。
  • -XX:NumberOfGCLogFiles=14:GC 日志文件的滚动数量,使 GC 日志文件数量维持在 14 个,超出 14 个后,将日志覆盖写入到最早的日志文件中。
  • -XX:GCLogFileSize=20M:GC 日志文件的大小,超出大小后触发日志的轮转,将日志覆盖写入到最早的日志文件中。
  • -XX:+PrintHeapAtGC:在进行 GC 的前后打印出堆的信息。
  • -XX:+HeapDumpOnOutOfMemoryError:内存溢出的时候生成 dump 文件。
  • -XX:HeapDumpPath=目录/xxx.hprof:指定内存溢出时,dump 文件的生成路径,默认为当前目录。
  • -Xloggc:springboot-demo-gc-%t".log":指定 GC 日志的输出文件。

三、解析 GC 日志

在解析 GC 日志前,推荐一个在线解析 GC 日志的地址,我个人感觉比较好用:

  • GCeasy: https://gceasy.ycrash.cn/

在这里插入图片描述

当然,我们也可以完全自己进行分析。

GC 日志的格式和内容可以因 JVM 版本和 GC 算法的不同而会有所差异。下面是一个典型的 GC 日志示例:

2023-04-25T10:30:00.123+0800: 1.234: [GC (Allocation Failure) [PSYoungGen: 123456K->12345K(153600K)] 185432K->67890K(579200K), 0.0123456 secs] [Times: user=0.009876, sys=0.002468, real=0.012345]
  • 2023-04-25T10:30:00.123+0800:在2023年4月25日10点30分00.123秒(UTC+8时区)时,发生了一次GC。
  • [PSYoungGen: 123456K->12345K(153600K)]:GC前,新生代(PSYoungGen)使用了123456K内存,GC后减少到12345K。
  • 185432K->67890K(579200K), 0.0123456 secs:整个堆内存(包括老年代和新生代)GC前使用了185432K,GC后减少到67890K。GC持续了0.0123456秒。
  • [Times: user=0.009876, sys=0.002468, real=0.012345]:用户态CPU时间为0.009876秒,内核态CPU时间为0.002468秒,实际耗时为0.012345秒,最后这个是最重要的考察维度。

通过解析GC日志,我们可以了解GC的频率、持续时间、回收的内存量等信息,从而分析应用程序的内存使用情况和性能瓶颈。


四、优化建议

根据 GC 日志的分析结果,我们可以采取一些优化措施来提高应用程式的性能:

  1. 调整堆内存大小: 根据应用程序的实际需求,适当增加或减少堆内存的大小。
  2. 选择合适的 GC 算法: 不同的 GC 算法适用于不同的应用场景。根据 GC 日志的分析结果,选择最适合当前应用程序的 GC 算法。
  3. 优化代码: 减少对象的创建和长时间持有,避免内存泄漏等问题。
  4. 使用内存分析工具: 结合内存分析工具(如)

整理完毕,完结撒花~🌻





参考地址:

1.深入解析Java日志:如何开启JVM GC日志获取,https://developer.baidu.com/article/details/3210478
2.JVM 配置GC日志,https://blog.csdn.net/Coco_chun/article/details/120332428
3.【Java8】jvm 开启GC日志(ParNew+CMS),https://blog.csdn.net/smallbirdnq/article/details/132906468

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/549989.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

贵阳市人民政府副市长刘岚调研珈和科技

4月9日,贵阳市人民政府副市长、党组成员刘岚一行到珈和科技走访调研,珈和科技总经理冷伟热情接待了考察团,就企业算力需求与合作,特色产业园区建设,科技成果转化落地等方面进行深入交流。 贵阳市教育局局长李波&#…

智能商品计划系统如何提升鞋服零售品牌的竞争力

国内鞋服零售企业经过多年的发展,已经形成了众多知名品牌,然而近年来一些企业频频受到库存问题的困扰,这一问题不仅影响了品牌商自身,也给长期合作的经销商带来了困扰。订货会制度在初期曾经有效地解决了盲目生产的问题&#xff0…

Vue加载glb / gltf模型(如何在vue中使用Three.js,vue使用threejs加载glb模型)

简介:Three.js 是一个用于在 Web 上创建和显示 3D 图形的 JavaScript 库。它提供了丰富的功能和灵活的 API,使开发者可以轻松地在网页中创建各种 3D 场景、模型和动画效果。可以用来展示产品模型、建立交互式场景、游戏开发、数据可视化、教育和培训等等…

RISC-V微架构验证

对于RISC-V处理器因其灵活性和可扩展性而受到广泛关注,但如果没有高效验证策略,错误的设计实现可能会影响RISC-V的继续推广。 在RISC-V出现之前,对于大多数半导体公司来说,处理器验证几乎成为一门屠龙之技。专业知识被浓缩到少数几…

基于afx透明视频的视觉增强前端方案

作者 | 青玉 导读 本文介绍了增长前端团队自研的Webview框架下透明视频视觉增强方案,该方案在保证对视觉进行高度还原的同时可投入更少的开发成本,还能获得更优的前端性能表现。文章首先分析了市面上动画方案的优缺点,然后详细介绍了透明视频…

stm32实现hid鼠标

启动CubelMX 选择芯片(直接输入stm32f103zet6) 设置时钟 如下图 usb设置 配置usb设备 调试端口设置 配置时钟 项目输出设置 打开工程(后记:此工程含有中文不能编译通过) 配置项目 配置调试器 编译无法通过 删除路径中的中文,以及…

如何将Oracle 中的部分不兼容对象迁移到 OceanBase

本文总结分析了 Oracle 迁移至 OceanBase 时,在出现三种不兼容对象的情况时的处理策略以及迁移前的预检方式,通过提前发现并处理这些问题,可以有效规避迁移过程中的报错风险。 作者:余振兴,爱可生 DBA 团队成员&#x…

盲人专用软件定制开发:突破出行壁垒,点亮生活之路

身为一名资深记者,我始终关注着各类社会群体面临的挑战与应对策略。今天,我将目光投向了一个特殊群体——盲人,以及一款旨在破解他们独立出行难题的盲人专用软件。这款应用叫做蝙蝠避障,它通过定制开发,以先进的技术手…

Achronix FPGA增加对Bluespec提供的基于Linux的RISC-V软处理器的支持,以实现可扩展数据处理

Bluespec支持加速器功能的RISC-V处理器将Achronix的FPGA转化为可编程SoC 2024年4月——高性能FPGA芯片和嵌入式FPGA(eFPGA)硅知识产权(IP)领域的领先企业Achronix半导体公司,以及RISC-V工具和IP领域的行业领导者Blues…

PySpark预计算ClickHouse Bitmap实践

1. 背景 ClickHouse全称是Click Stream,Data WareHouse,是一款高性能的OLAP数据库,既使用了ROLAP模型,又拥有着比肩MOLAP的性能。我们可以用ClickHouse用来做分析平台快速出数。其中的bitmap结构方便我们对人群进行交并。Bitmap位…

0基础如何入门编程?

0基础如何进入IT行业 ? 前言 简介:对于没有任何相关背景知识的人来说,如何才能成功进入IT行业?是否有一些特定的方法或技巧可以帮助他们实现这一目标? 主要方法有如下几点建议提供给宝子们 目录 免费视频网课学习…

记录一下hive跑spark的insert,update语句报类找不到的问题

我hive能正常启动,建表没问题,我建了一个student表,没问题,但执行了下面一条insert语句后报如下错误: hive (default)> insert into table student values(1,abc); Query ID atguigu_20240417184003_f9d459d7-199…

【HCIP学习】OSPF协议基础

一、OSPF基础 1、技术背景(RIP中存在的问题) RIP中存在最大跳数为15的限制,不能适应大规模组网 周期性发送全部路由信息,占用大量的带宽资源 路由收敛速度慢 以跳数作为度量值 存在路由环路可能性 每隔30秒更新 2、OSPF协议…

十大排序——11.十大排序的比较汇总及Java中自带的排序算法

这篇文章对排序算法进行一个汇总比较! 目录 0.十大排序汇总 0.1概述 0.2比较和非比较的区别 0.3基本术语 0.4排序算法的复杂度及稳定性 1.冒泡排序 算法简介 动图演示 代码演示 应用场景 算法分析 2.快速排序 算法简介 动图演示 代码演示 应用场景…

shell编程-1

shell编程 1 初识shell 1.1 文件描述符与输出重定向 FD (file descriptor) FD值英文含义0Standard Input正确输入,并返回在前端1Standard Output正确返回值2Standard Error Output错误返回值 常见格式 a.txt 1>a.txt 标准正确输出到a.txt 2>a.txt 准错…

5_vscode+valgrind+gdb调试程序

需求 项目程序, 读取串口数据, 出现程序崩溃问题valgrind 可以调试定位内存问题: 内存泄漏,非法地址访问,越界访问等内存问题vscode gdb 可视化调试效果, 比命令行简单快捷很多期望使用vscode valgrind gdb 调试程序内存异常, 崩溃退出的问题 环境准备 sudo apt install v…

大话设计模式之解释器模式

解释器模式是一种行为设计模式,它用于解释语言的语法或表达式,将其转换为可执行的程序或操作。这种模式通常用于处理类似编程语言或规则引擎中的问题。 在解释器模式中,通常有两种角色: 解释器(Interpreter&#xff0…

Linux网络基础(一)

网络发展 对于我们国家来讲,网络的发展,不仅仅是互联网公司在发展,提供重要推动力的还有三大运商 随之而来的是新设备的诞生。比如集线器,网线,光纤,调制解调器,路由器,防火墙&am…

盲盒小程序成为收益“法宝”?盲盒线上如何发展

近年来,盲盒在年轻人中掀起了一股潮玩热风,受到了不少年轻人的青睐,盲盒商品更是在不断创新中,收藏价值逐渐提高。随着市场规模的扩大,越来越多的玩家和商家涌入到了市场中,盲盒的商业模式正在加快发展中。…

VBA脚本: excel隐藏和展开指定行 【图文】

打开开发工具功能 【文件】-》【选项】-》【自定义功能区】-》勾选【开发工具】-》【确定】 代开VBA编辑器 【开发工具】-》【Visual Basic】 插入模块 编写代码 所有sheet 关闭 Sub HideRowsInAllSheets()Dim ws As WorksheetDim i As Integer 循环遍历所有工作表For E…