环境: JDK1.8

 

打开GC日志:

-verbose:gc

这个只会显示总的GC堆的变化, 如下:

[GC (Allocation Failure)  80832K->19298K(227840K), 0.0084018 secs]
[GC (Metadata GC Threshold) 109499K->21465K(228352K), 0.0184066 secs]
[Full GC (Metadata GC Threshold) 21465K->16716K(201728K), 0.0619261 secs]

参数解析:

GC, Full GC, GC的类型, GC只在新生代上进行, Full GC包括永生代, 新生代, 老年代。

Allocation Failure: GC发生的原因。

80832K->19298K: 堆在GC前的大小和GC后的大小。

228840k: 现在的堆大小。

0.0084018 secs: GC持续的时间。

 

但是如果想查看更详细的信息, 比如新生代在GC前后的变化或者老年代在GC前后的变化等, 就需要打开另一个开关:

-XX:+PrintGCDetails

现在的命令就变成了 -verbose:gc -XX:+PrintGCDetails, 然后输出的信息如下:

[GC (Allocation Failure) [PSYoungGen: 70640K->10116K(141312K)] 80541K->20017K(227328K), 0.0172573 secs] [Times: user=0.03 sys=0.00, real=0.02 secs]
[GC (Metadata GC Threshold) [PSYoungGen: 98859K->8154K(142336K)] 108760K->21261K(228352K), 0.0151573 secs] [Times: user=0.00 sys=0.01, real=0.02 secs]
[Full GC (Metadata GC Threshold) [PSYoungGen: 8154K->0K(142336K)] [ParOldGen: 13107K->16809K(62464K)] 21261K->16809K(204800K), [Metaspace: 20599K->20599K(1067008K)], 0.0639732 secs] [Times: user=0.14 sys=0.00, real=0.06 secs]

参数解析:

GC, Full FC: 同样是GC的类型

Allocation Failure: GC原因

PSYoungGen: 使用了Parallel Scavenge并行垃圾收集器的新生代GC前后大小的变化

ParOldGen: 使用了Parallel Old并行垃圾收集器的老年代GC前后大小的变化

Metaspace: 元数据区GC前后大小的变化, JDK1.8中引入了元数据区以替代永生代, 因为永生代大小固定不能动态调整, 所以有弊端。

xxx secs: 指GC花费的时间

Times: user指的是垃圾收集器花费的所有CPU时间, sys, 花费在等待系统调用或系统事件的时间, real: GC从开始到结束的时间, 包括其他进程占用时间片的时间。

 

加上GC时间:

-XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps

那么命令就变成了:

-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps

输出就变成了:

2019-09-24T22:15:24.518+0800: 3.287: [GC (Allocation Failure) [PSYoungGen: 136162K->5113K(136192K)] 141425K->17632K(222208K), 0.0248249 secs] [Times: user=0.05 sys=0.00, real=0.03 secs]
2019-09-24T22:15:25.559+0800: 4.329: [GC (Metadata GC Threshold) [PSYoungGen: 97578K->10068K(274944K)] 110096K->22658K(360960K), 0.0094071 secs] [Times: user=0.00 sys=0.00, real=0.01 secs]
2019-09-24T22:15:25.569+0800: 4.338: [Full GC (Metadata GC Threshold) [PSYoungGen: 10068K->0K(274944K)] [ParOldGen: 12590K->13564K(56320K)] 22658K->13564K(331264K), [Metaspace: 20590K->20590K(1067008K)], 0.0494875 secs] [Times: user=0.17 sys=0.02, real=0.05 secs]

可见带上了时间和日期。

 

如果想把GC日志存到文件的话, 是下面这个参数:

-Xloggc:/path/to/gc.log

然后就可以用一些工具去分析这些gc日志。

 

Refer: https://www.baeldung.com/java-verbose-gc

Java打开GC日志的更多相关文章

  1. JAVA 从GC日志分析堆内存 第七节

    JAVA 从GC日志分析堆内存 第七节   在上一章中,我们只设置了整个堆的内存大小.但是我们知道,堆又分为了新生代,年老代.他们之间的内存怎么分配呢?新生代又分为Eden和Survivor,他们的比 ...

  2. 理解Java的GC日志

    分析如下GC日志:[GC [PSYoungGen: 9216K->1024K(9216K)] 1246196K->1246220K(1287040K), 0.2398360 secs] [ ...

  3. Java虚拟机系列(四)---查看GC日志

    这一节穿插一点如何在eclipse中配置并查看某个Java应用GC日志的知识点,我也是通过调研知道的,因为书中写的不是很详细,主要是为下一节做准备. 一.eclipse中配置GC 在eclipse中如 ...

  4. java CMS gc解析

    转载: http://www.blogjava.net/killme2008/archive/2009/09/22/295931.html     CMS,全称Concurrent Low Pause ...

  5. 浅谈 G1 GC 日志格式

    在 Java9 中,G1 GC 将成为默认的垃圾收集器,G1 垃圾收集器的关键特性之一是能够在不牺牲吞吐量的同时,限制 GC 暂停时间(即可以设置所需的最大停顿时间). 由于 G1 GC 正在逐渐成为 ...

  6. Tomcat输出保存JVM GC日志文件

    当系统出现问题时,分析java虚拟机GC日志可以帮助我们定位问题,一般来说, 我们可以通过制定JVM参数使tomcat保存GC日志文件,具体实现如下: Windows下: 找到tomcat的解压目录, ...

  7. 【转载】Java垃圾回收内存清理相关(虚拟机书第三章),GC日志的理解,CPU时间、墙钟时间的介绍

    主要看<深入理解Java虚拟机> 第三张 P84 开始是垃圾收集相关. 1. 1960年诞生于MIT的Lisp是第一门采用垃圾回收的语言. 2. 程序计数器.虚拟机栈.本地方法栈3个区域随 ...

  8. Java GC日志查看

    Java GC类型 Java中的GC有哪几种类型? 参数 描述 UseSerialGC 虚拟机运行在Client模式的默认值,打开此开关参数后, 使用Serial+Serial Old收集器组合进行垃 ...

  9. 【GC分析】Java GC日志查看

    Java中的GC有哪几种类型? 参数 描述 UseSerialGC 虚拟机运行在Client模式的默认值,打开此开关参数后, 使用Serial+Serial Old收集器组合进行垃圾收集. UsePa ...

随机推荐

  1. [Algorithm] 387. First Unique Character in a String

    Given a string, find the first non-repeating character in it and return it's index. If it doesn't ex ...

  2. WinDbg常用命令系列---!runaway

    简介 !runaway扩展显示有关每个线程使用的时间的信息. 使用形式 !runaway [Flags] 参数 Flags指定要显示的信息类型. 标志可以是以下位的任意组合. 默认值为 0x1.位 0 ...

  3. 网络命令——last、lastlog、traceroute、netstat

    1.last命令(查看目前和过去用户的登录信息) 2.lastlog命令(检查某用户上次登录的时间): 3.traceroute命令: 显示数据包到主机间的路径. 4.netstat命令: 查看本机已 ...

  4. 【JZOJ6213】【20190613】String

    题目 \(n \le 10^{18} \ , \ |T| \le 10^5\) 题解 显然,最少的操作次数一定是贪心地能匹配就匹配 我们可以建出\(T\)的SAM,把SAM不能走的边补到根的后继节点 ...

  5. ES6基础入门之let、const

    作者 | Jeskson来源 | 达达前端小酒馆 01 首先呢?欢迎大家来学习ES6入门基础let,const的基础知识内容.初始ECMA Script6. ESMAScript与JavaScript ...

  6. navigator对象(了解即可)

    navigator是window的子对象 navigator.appName // Web浏览器全称navigator.appVersion // Web浏览器厂商和版本的详细字符串navigator ...

  7. Django实现自动发布(1数据模型)

    公司成立之初,业务量较小,一个程序包揽了所有的业务逻辑,此时服务器数量少,上线简单,基本开发-测试-上线都是由开发人员完成. 随着业务量逐渐上升,功能增多,代码量增大,而单一功能上线需要重新编译整个程 ...

  8. Spring Cloud Hystrix基本原理

    本篇学习Spring Cloud家族中的重要成员:Hystrix.分布式系统中一个服务可能依赖着很多其他服务,在高并发的场景下,如何保证依赖的某些服务如果出了问题不会导致主服务宕机这个问题就会变得异常 ...

  9. JVM线程状态Running、Sleeping、Wait、Park、Monitor

    1,使用JVisualVM时,打开Threads监控,我们可以发现Java的线程状态有以下几种: 2,JVM线程状态: NEW, RUNNABLE, BLOCKED, WAITING, TIMED_W ...

  10. spring boot项目maven打包可执行JAR

    在pom.xml中添加如下配置: <!-- 打包可执行jar包 --> <plugin> <groupId>org.springframework.boot< ...