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

news2024/11/25 3:05:09

目录

    • 一、引言
    • 二、开启 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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用海外云手机高效率运营TikTok!

很多做国外社媒运营的公司,想要快速引流,往往一个账号是不够的,多数都是矩阵养号的方式,运营多个TikToK、Facebook、Instagram等账号,慢慢沉淀流量变现,而他们都在用海外云手机这款工具! 海外云…

HTML 入门

HTML 简介 1. 什么是 HTML? 全称:HyperText Markup Language(超文本标记语言)。 超文本:暂且简单理解为 “超级的文本”,和普通文本比,内容更丰富。 标 记:文本要变成超文本&…

『FPGA通信接口』串行通信接口-SPI

文章目录 1.SPI简介2.控制时序3.Dual、Qual模式4.例程设计与代码解读5.SPI接口实战应用5.1时序要求5.2仿真时序图5.3代码设计 6.传送门 1.SPI简介 SPI是串行外设接口(Serial Peripheral Interface)的缩写,通常说SPI接口或SPI协议都是指SPI这…

IBM SPSS Statistics for Mac中文激活版:强大的数据分析工具

IBM SPSS Statistics for Mac是一款功能强大的数据分析工具,为Mac用户提供了高效、精准的数据分析体验。 IBM SPSS Statistics for Mac中文激活版下载 该软件拥有丰富的统计分析功能,无论是描述性统计、推论性统计,还是高级的多元统计分析&am…

智能零售:引领购物新时代

智能零售通过整合人工智能、物联网、大数据和机器学习等技术,正在彻底改变传统的购物模式,为消费者和零售商提供前所未有的效率和个性化体验。 智能零售利用消费者数据分析来提供个性化的购物推荐。无论是在线平台或是实体店内,智能系统都能…

“中医显示器”是人体健康监测器

随着科技的进步,现代医学设备已经深入到了人们的日常生活中。然而,在这个过程中,我们不应忘记我们的医学根源,中医。我们将中医的望、闻、问、切四诊与现代科技相结合,通过一系列的传感器和算法将人体的生理状态以数字…

MyBatisPlus自定义SQL

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉🍎个人主页:Leo的博客💞当前专栏: 循序渐进学SpringBoot ✨特色专栏: MySQL学习 🥭本文内容:MyBatisPlus自定义SQL 📚个人知识库: Leo知识库,欢迎大家访问 目录 1.前言☕…

机器学习方法在测井解释上的应用-以岩性分类为例

机器学习在测井解释上的应用越来越广泛,主要用于提高油气勘探和开发的效率和精度。通过使用机器学习算法,可以从测井数据中自动识别地质特征,预测岩石物理性质,以及优化油气储层的评估和管理。 以下是机器学习在测井解释中的一些…

华为配置路由式Proxy ARP示例

配置路由式Proxy ARP示例 组网图形 图1 配置路由式Proxy ARP组网图 路由式Proxy ARP简介配置注意事项组网需求配置思路操作步骤配置文件 路由式Proxy ARP简介 企业内部进行子网划分时,可能会出现两个子网网络属于同一网段,但是却不属于同一物理网络的情…

新a_bogus算法还原大赏

新a_bogus算法还原大赏 记得加我我们的学习群哦:529528142 1、本次新ab是继承之前旧ab的过程,新ab分为上半部分和下半部分,上半部分是之前的旧ab,下半部分我们开始讲解。 s.apply(l, u).length 172这是断住ab的条件,…

【介绍下负载均衡原理及算法】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

深入掌握k8s核心概念--Pod(二)

详解Pod的配置管理与调度特性等剖析 Kubernetes 中 Pod 的配置管理(ConfigMap)、调度策略、回滚与扩缩容详解一、Pod 配置管理:ConfigMap创建 ConfigMap 示例使用 ConfigMap 的 Pod 示例 二、玩转 Pod 调度:Kubernetes 高级调度策…

【笔记】ASP.NET Core Web API之Token验证

在实际开发中经常需要对外提供接口以便客户获取数据,由于数据属于私密信息,并不能随意供其他人访问,所以就需要验证客户身份。那么如何才能验证客户的身份呢?一个简单的小例子,简述ASP.NET Core Web API开发过程中&…

CTFHUB-技能树-Web前置技能-文件上传(前端验证—MIME绕过、00截断、00截断-双写后缀)

CTFHUB-技能树-Web前置技能-文件上传(前端验证—MIME绕过、00截断、00截断-双写后缀) 文章目录 CTFHUB-技能树-Web前置技能-文件上传(前端验证—MIME绕过、00截断、00截断-双写后缀)前端验证—MIME绕过有关MIMEMIME的作用 解题时有…

RACE IPEMD:构建安全基石的密码学原理与实践

title: RACE IPEMD:构建安全基石的密码学原理与实践 date: 2024/4/16 16:53:56 updated: 2024/4/16 16:53:56 tags: IPEMD哈希算法SHA-1SHA-2/3消息摘要数字签名安全分析 前言 在当今信息爆炸的时代,数据安全和隐私保护变得尤为重要。密码学作为信息安…

C语言100题练习打卡(2)

14&#xff0c;将一个正整数分解质因数。 例如&#xff1a;输入90&#xff0c;打印出902*3*3*5 #include<stdio.h> /*分析&#xff1a; * 1&#xff0c;如果这话质数恰巧等于&#xff08;小于的时候&#xff0c;继续执行循环&#xff09;n&#xff0c; 则说明分解质因数…

案例分析-redis

案例需求&#xff1a;在7002这个slave节点执行手动故障转移&#xff0c;重新夺回master地位 步骤如下&#xff1a; 1&#xff09;利用redis-cli连接7002这个节点 2&#xff09;执行cluster failover命令 如图&#xff1a; 效果&#xff1a; 4.5.RedisTemplate访问分片集群 …

Gitea是一个开源、轻量级的自托管Git解决方案

Gitea介绍 Gitea是一个由Go语言编写的、轻量级的、自托管的Git解决方案&#xff0c;类似于GitHub、GitLab等平台。它是用Go语言编写的开源软件&#xff0c;提供了Git版本控制系统的基本功能&#xff0c;包括代码托管、问题跟踪、代码审查、Wiki等。Gitea的设计目标是简单易用、…

ssm 体检预约管理系统开发mysql数据库web结构java编程计算机网页源码eclipse项目

一、源码特点 ssm 体检预约管理系统是一套完善的信息系统&#xff0c;结合springMVC框架完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码和数据库&#xff0c; 系统主要采用B/S…

深度学习 Lecture 7 迁移学习、精确率、召回率和F1评分

一、迁移学习&#xff08;Transfer learning) 用来自不同任务的数据来帮助我解决当前任务。 场景&#xff1a;比如现在我想要识别从0到9度手写数字&#xff0c;但是我没有那么多手写数字的带标签数据。我可以找到一个很大的数据集&#xff0c;比如有一百万张图片的猫、狗、汽…