如何读懂Java GC日志

Java应用程序的GC日志对分析定位很多性能问题有着非常大的帮助。默认情况下,Java应用程序不会自动产生GC日志。如果需要输出GC日志,必须在JVM启动时增加对应的参数,场景的参数如表5-8所示。

2. GC日志分析一

例如,在Tomcat的JVM启动参数中加入参数:-XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -Xloggc:..\logs\gc.log,在Tomcat运行后即可在logs目录下生成对应的GC日志,如图5-3-1所示。

输出的GC日志内容如下:

Java HotSpot(TM) 64-Bit Server VM (25.101-b13) for windows-amd64 JRE (1.8.0_101-b13), built on Jun 22 2016 01:21:29 by "java_re" with MS VC++ 10.0 (VS2010)
Memory: 4k page, physical 8078128k(2694664k free), swap 16154412k(4180772k free)
CommandLine flags: -XX:InitialHeapSize=129250048 -XX:+ManagementServer -XX:MaxHeapSize=2068000768 -XX:+PrintGC -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC 
{Heap before GC invocations=1 (full 0):
 PSYoungGen      total 36864K, used 31744K [0x00000000d6e00000, 0x00000000d9700000, 0x0000000100000000)
  eden space 31744K, 100% used [0x00000000d6e00000,0x00000000d8d00000,0x00000000d8d00000)
  from space 5120K, 0% used [0x00000000d9200000,0x00000000d9200000,0x00000000d9700000)
  to   space 5120K, 0% used [0x00000000d8d00000,0x00000000d8d00000,0x00000000d9200000)
 ParOldGen       total 84992K, used 0K [0x0000000084a00000, 0x0000000089d00000, 0x00000000d6e00000)
  object space 84992K, 0% used [0x0000000084a00000,0x0000000084a00000,0x0000000089d00000)
 Metaspace       used 13952K, capacity 14326K, committed 14592K, reserved 1062912K
  class space    used 1560K, capacity 1705K, committed 1792K, reserved 1048576K
2020-02-14T15:34:30.245+0800: 1.292: [GC (Allocation Failure) [PSYoungGen: 31744K->5104K(36864K)] 31744K->7267K(121856K), 0.0131568 secs] [Times: user=0.03 sys=0.01, real=0.01 secs] 
Heap after GC invocations=1 (full 0):
 PSYoungGen      total 36864K, used 5104K [0x00000000d6e00000, 0x00000000d9700000, 0x0000000100000000)
  eden space 31744K, 0% used [0x00000000d6e00000,0x00000000d6e00000,0x00000000d8d00000)
  from space 5120K, 99% used
[0x00000000d8d00000,0x00000000d91fc040,0x00000000d9200000)
  to   space 5120K, 0% used [0x00000000d9200000,0x00000000d9200000,0x00000000d9700000)
 ParOldGen       total 84992K, used 2163K [0x0000000084a00000, 0x0000000089d00000, 0x00000000d6e00000)
  object space 84992K, 2% used [0x0000000084a00000,0x0000000084c1ce70,0x0000000089d00000)
 Metaspace       used 13952K, capacity 14326K, committed 14592K, reserved 1062912K
  class space    used 1560K, capacity 1705K, committed 1792K, reserved 1048576K
}

……

{Heap before GC invocations=8 (full 0):
 PSYoungGen      total 144896K, used 88289K [0x00000000d6e00000, 0x00000000e9700000, 0x0000000100000000)
  eden space 125440K, 54% used [0x00000000d6e00000,0x00000000db13e380,0x00000000de880000)
  from space 19456K, 99% used [0x00000000de880000,0x00000000dfb7a2b0,0x00000000dfb80000)
  to   space 26624K, 0% used [0x00000000e7d00000,0x00000000e7d00000,0x00000000e9700000)
 ParOldGen       total 84992K, used 39157K [0x0000000084a00000, 0x0000000089d00000, 0x00000000d6e00000)
  object space 84992K, 46% used [0x0000000084a00000,0x000000008703d6c8,0x0000000089d00000)
 Metaspace       used 20699K, capacity 21010K, committed 21248K, reserved 1069056K
  class space    used 2353K, capacity 2457K, committed 2560K, reserved 1048576K
2020-02-14T15:34:35.879+0800: 6.926: [GC (Metadata GC Threshold) [PSYoungGen: 88289K->14355K(274432K)] 127447K->53769K(359424K), 0.1285266 secs] [Times: user=0.48 sys=0.02, real=0.13 secs] 
Heap after GC invocations=8 (full 0):
 PSYoungGen      total 274432K, used 14355K [0x00000000d6e00000, 0x00000000e9400000, 0x0000000100000000)
  eden space 250880K, 0% used [0x00000000d6e00000,0x00000000d6e00000,0x00000000e6300000)
  from space 23552K, 60% used [0x00000000e7d00000,0x00000000e8b04f28,0x00000000e9400000)
  to   space 25088K, 0% used [0x00000000e6300000,0x00000000e6300000,0x00000000e7b80000)
 ParOldGen       total 84992K, used 39413K [0x0000000084a00000, 0x0000000089d00000, 0x00000000d6e00000)
  object space 84992K, 46% used [0x0000000084a00000,0x000000008707d6d8,0x0000000089d00000)
 Metaspace       used 20699K, capacity 21010K, committed 21248K, reserved
 1069056K
  class space    used 2353K, capacity 2457K, committed 2560K, reserved 1048576K
}
{Heap before GC invocations=9 (full 1):
 PSYoungGen      total 274432K, used 14355K [0x00000000d6e00000, 0x00000000e9400000, 0x0000000100000000)
  eden space 250880K, 0% used [0x00000000d6e00000,0x00000000d6e00000,0x00000000e6300000)
  from space 23552K, 60% used [0x00000000e7d00000,0x00000000e8b04f28,0x00000000e9400000)
  to   space 25088K, 0% used [0x00000000e6300000,0x00000000e6300000,0x00000000e7b80000)
 ParOldGen       total 84992K, used 39413K [0x0000000084a00000, 0x0000000089d00000, 0x00000000d6e00000)
  object space 84992K, 46% used [0x0000000084a00000,0x000000008707d6d8,0x0000000089d00000)
 Metaspace       used 20699K, capacity 21010K, committed 21248K, reserved 1069056K
  class space    used 2353K, capacity 2457K, committed 2560K, reserved 1048576K
2020-02-14T15:34:36.007+0800: 7.054: [Full GC (Metadata GC Threshold) [PSYoungGen: 14355K->0K(274432K)] [ParOldGen: 39413K->32862K(83456K)] 53769K->32862K(357888K), [Metaspace: 20699K->20699K(1069056K)], 0.1843152 secs] [Times: user=0.62 sys=0.00, real=0.18 secs] 
Heap after GC invocations=9 (full 1):
 PSYoungGen      total 274432K, used 0K [0x00000000d6e00000, 0x00000000e9400000, 0x0000000100000000)
  eden space 250880K, 0% used [0x00000000d6e00000,0x00000000d6e00000,0x00000000e6300000)
  from space 23552K, 0% used [0x00000000e7d00000,0x00000000e7d00000,0x00000000e9400000)
  to   space 25088K, 0% used [0x00000000e6300000,0x00000000e6300000,0x00000000e7b80000)
 ParOldGen       total 83456K, used 32862K [0x0000000084a00000, 0x0000000089b80000, 0x00000000d6e00000)
  object space 83456K, 39% used [0x0000000084a00000,0x0000000086a17ba0,0x0000000089b80000)
 Metaspace       used 20699K, capacity 21010K, committed 21248K, reserved 1069056K
  class space    used 2353K, capacity 2457K, committed 2560K, reserved 1048576K
}

从日志中可以看到年轻代的垃圾回收和年老代的垃圾回收情况,并且在垃圾回收执行的前后都输出了堆内存的使用情况。

(1)“Java HotSpot(TM) 64-Bit Server VM (25.101-b13) for windows-amd64 JRE (1.8.0_101-b13), built on Jun 22 2016 01:21:29 by "java_re" with MS VC++ 10.0 (VS2010)”这一段输出了JVM虚拟机的版本以及当前JVM的运行环境。

(2)“Memory: 4k page, physical 8078128k(2694664k free), swap 16154412k(4180772k free)”这一段输出了操作系统的物理内存和虚拟内存的总量以及使用情况。

(3)“CommandLine flags: -XX:InitialHeapSize=129250048 -XX:+ManagementServer -XX:Max
HeapSize=2068000768 -XX:+PrintGC -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:
+PrintGCTimeStamps -XX:+PrintHeapAtGC -XX:+UseCompressedClassPointers -XX:+
UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC”这一段输出了JVM的GC垃圾回收器信息以及GC日志的打印参数。

2. GC日志分析二

如图5-3-2所示是JVM中一次年轻代内存区域GC垃圾回收的输出日志,一次完整的GC日志一般被一个“{}”所包括。

(1)“Heap before GC invocations=1 (full 0)”描述了发生了一次GC垃圾回收,“full 0”表示发生了0次Full GC,在之后描述了发生GC垃圾回收之前和之后年轻代区域(PSYoungGen)、eden区域(eden space)、From Survivor空间区域(from space)、To Survivor空间区域(to space)、年老代区域(ParOldGen)、元数据区域(Metaspace)、class space 的内存空间使用情况。

(2)“2020-02-14T15:34:30.245+0800: 1.292: [GC (Allocation Failure) [PSYoungGen: 31744K->5104K(36864K)] 31744K->7267K(121856K), 0.0131568 secs] [Times: user=0.03 sys=0.01, real=0.01 secs]”描述了在2020-02-14T15:34:30.245这个时间发生了一次年轻代GC垃圾回收、GC发生原因是Allocation Failure(年轻代中没有足够的空间能够存储新的数据了)、GC发生时年轻代内存使用从31744KB减少为5104KB([PSYoungGen: 31744K->5104K(36864K)])、GC发生时堆内存的总使用从31744KB减少为7267KB(31744K->7267K(121856K))、GC总耗时时长为0.0131568秒、用户耗时0.03秒、系统耗时0.01秒、实际耗时0.01秒。

本文节选自《软件性能测试、分析与调优实践之路(第2版)》,获作者和出版社授权发布。

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

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

相关文章

【Spring Cloud】微服务注册中心的工作原理

SueWakeup 个人主页:SueWakeup 系列专栏:学习技术栈 个性签名:人生乏味啊,我欲令之光怪陆离 本文封面由 凯楠📷 友情提供! 目录 前言 1. 注册中心的主要作用 2. 常见的注册中心 3. Nacos 服务注册和发…

护眼大路灯哪个更适合学生?大路灯购选分享,经验总结!

在当前开节奏的生活领域中,作为测评师我观察到,大路灯作为一种新型照明的补光工具,逐渐被越来越多的人融入家庭生活中。这种设备无疑为用眼人群带来了显著的好处。但许多用户反馈中也频繁提及平时是眼睛疲劳感越来越严重等副情况,…

Java 学习和实践笔记(42):内部类(inner class)

内部类的两个要点: 1)内部类提供了更好的封装。只能让外部类直接访问,不允许同一个包中的其他类直 接访问。 2)内部类可以直接访问外部类的私有属性,内部类被当成其外部类的成员。但外部类 不能访问内部类的内部属性。| 注意&…

【开源】SpringBoot框架开发个人保险管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 登录注册模块2.2 保险档案模块2.3 保险订单模块2.4 保险理赔模块 三、系统展示四、核心代码4.1 查询保险产品4.2 新增保险预定4.3 订单支付4.4 新增理赔单4.5 查询保险理赔 五、免责说明 一、摘要 1.1 项目介绍 基于J…

停车管理系统asp.net+sqlserver

停车管理系统asp.netsqlserver 说明文档 运行前附加数据库.mdf(或sql生成数据库) 主要技术: 基于asp.net架构和sql server数据库, 功能模块: 停车管理系统asp.net sqlserver 用户功能有菜单列表 我的停车记录 专…

【解决】Unity Profiler | Sempaphore.WaitForSignal

开发平台:Unity 2022 版本以上 开发语言:CSharp 6.0 编程平台:Visual Studio 2022 关键词:Sempaphore.WaitForSignal   问题背景 开发过程中出现 Waiting to excute code… 长时间阻碍运行。使用 逐对象排查法 确认影响无法运行…

在离线的arm架构kylin v10服务器上使用Kuboard-Spray搭建K8S集群

在离线的arm架构kylin v10服务器上使用Kuboard-Spray搭建K8S集群 在内网项目中需要安装K8S集群,经过调研,选择使用Kuboard-Spray工具搭建K8S集群,降低学习成本,提高安装效率。 为了简化安装使用集群的过程,搭建了私有…

excel处理_多个excel文件合并

data文件夹内,有多个xls文件。每个xls文件格式一致, 表头占两行,表位汇总数据占一行。 表头两行,拼接前第二行设置为表头,且删除第二行。 在python读入的dataframe中,游轮成本表是表头,第一行是…

解密Mysql数据库引擎:探究其背后的神秘力量(二)

本系列文章简介: 在本系列文章中,我们将从MySQL的基础知识入手,逐步深入到数据库引擎的内部机制。我们将详细介绍MySQL中常用的几种数据库引擎,包括InnoDB、MyISAM等,分析它们的优缺点以及适用场景。同时,我…

[AutoSar]BSW_Com015 PDUR 模块配置

目录 关键词平台说明一、Abbreviations二、PduRBswModules三、PduRGeneration四、PduRDestPdus4.1 全局PDU ID和本地PDU ID 关键词 嵌入式、C语言、autosar、OS、BSW 平台说明 项目ValueOSautosar OSautosar厂商vector , EB芯片厂商TI 英飞凌编程语言C&#xff0…

亮数据Bright Data,跨境电商一站式解决方案

目录 一、跨境电商的瓶颈1、技术门槛2、语言问题3、网络稳定性4、验证码处理和自动识别5、数据安全6、法律法规 二、机不可失三、动态住宅代理1、网络代理2、动态住宅代理3、动态住宅代理的主要优点 四、动态住宅代理的使用场景五、如何使用亮数据动态代理1、开始使用2、添加新…

【C++】为什么vector的地址与首元素地址不同?

文章目录 一、问题发现:二、结果分析三、问题解析 一、问题发现: &vector和&vector[0]得到的两个地址居然不相同,对数组array取变量名地址和取首元素地址的结果是相同的。这是为啥呢? 使用下面代码进行验证:…

harbor迁移

采用从原仓库拉取镜像的方式 根据情况填,空的话,默认就是从原harbor的abc仓库拉到现harbor的abc仓库

termux安装

termux安装Python和postgres 安装python 安装pg数据库

LabVIEW高效光伏数据监控与管理系统

LabVIEW高效光伏数据监控与管理系统 随着新能源技术的发展,光伏发电系统作为一种清洁、高效的能源获取方式受到了广泛的关注。但是,由于光伏发电的特性受到多种环境因素的影响,其运行效率和安全性成为了关键问题。因此,开发一个高…

电脑硬盘误删怎么恢复,误删硬盘的文件能不能再恢复

误删硬盘的文件能不能再恢复?很多朋友都很关心这个问题,不用担心,误删硬盘文件是可以恢复的!使用电脑不可避免会遇到一些糊涂的时刻,比如误删了重要的文件。当我们发现自己不小心将硬盘上的文件删除时,心里…

ElasticSearch - 基本操作

前言 本文记录 ES 的一些基本操作,就是对官方文档的一些整理,按自己的习惯重新排版,凑合着看。官方的更详细,建议看官方的。 下文以 books 为索引名举例。 新增 添加单个文档 (没有索引会自动创建) POST books/_doc {"n…

Python爬虫入门:HTTP与URL基础解析及简单示例实践

在数字化时代,数据已成为一种宝贵的资源。Python作为一种强大的编程语言,在数据采集和处理方面表现出色。爬虫技术,即网络爬虫,是Python中用于数据采集的重要工具。本文作为Python爬虫基础教程的第一篇,将深入讲解URL和…

酷开系统满足你的需求,加入酷开会员开启娱乐之旅

酷开科技深知家庭娱乐在我们生活中的重要性,因此,酷开科技不断努力为我们带来更好的内容和服务,在这里,我们能够享受到家庭娱乐的乐趣和便利,感受到酷开科技带来的温暖。电影迷、游戏迷还是音乐爱好者,酷开…

多项式朴素贝叶斯分类器

在这篇文章中,我们介绍多项式朴素贝叶斯分类器是如何工作的,然后使用scikit-learn作为实际工作的示例来介绍如何使用。 与假设高斯分布的高斯朴素贝叶斯分类器相反,多项式朴素贝叶斯分类器依赖于多项分布。通过学习/估计每个类的多项概率来“…