JVM分析GC日志

7 篇文章 0 订阅

1、GC日志参数

-verbose:gc //输出gc日志信息,默认输出到标准输出
-XX:+PrintGC //输出GC日志。类似:-verbose:gc
-XX:+PrintGCDetails //在发生垃圾回收时打印内存回收相处的日志, 并在进程退出时输出当前内存各区域分配情况
-XX:+PrintGCTimeStamps //输出GC发生时的时间戳
-XX:+PrintGCDateStamps 输出GC发生时的时间戳(以日期的形式,例如:2013-05-04T21:53:59.234+0800)
-XX:+PrintHeapAtGC// 每一次GC前和GC后,都打印堆信息

 

-Xloggc:<file> //表示把GC日志写入到一个文件中去,而不是打印到标准输出中

2、GC日志格式

[GC (Allocation Failure) [PSYoungGen: 18944K->2528K(18944K)] 30757K->30427K(62976K), 0.0036557 secs] [Times: user=0.00 sys=0.00, real=0.01 secs] 


[Full GC (Ergonomics) [PSYoungGen: 2528K->0K(18944K)] [ParOldGen: 27899K->30149K(44032K)] 30427K->30149K(62976K), [Metaspace: 3160K->3160K(1056768K)], 0.0042183 secs] [Times: user=0.01 sys=0.01, real=0.00 secs] 

2.1  [GC(Allocation Failure)

发生了一次垃圾回收,这是一次Minior GC。它不区分新生代还是老年代GC,括号里的内容是gc发生的原因,这里的Allocation Failure的原因是新生代中没有足够区域能够存放需要分配的数据而失败

2.2、[PSYoungGen:76800K->8433K(89600K)

PSYoungGen:表示GC发生的区域,区域名称与使用的GC收集器是密切相关的

Serial收集器:Default New Generation 显示Defnew

ParNew收集器:ParNew

Parallel Scanvenge收集器:PSYoung

老年代和新生代同理,也是和收集器名称相关

76800K->8433K(89600K):GC前该内存区域已使用容量->GC后盖区域容量(该区域总容量)

如果是新生代,总容量则会显示整个新生代内存的9/10,即eden+from/to区

如果是老年代,总容量则是全身内存大小,无变化

76800K->8449K(294400K)

在显示完区域容量GC的情况之后,会接着显示整个堆内存区域的GC情况:GC前堆内存已使用容量->GC后堆内存容量(堆内存总容量),并且堆内存总容量 = 9/10 新生代 + 老年代,然后堆内存总容量肯定小于初始化的内存大小

[Times:user=0.02 sys=0.01,real=0.01 secs]

user:指CPU工作在用户态所花费的时间

sys:指CPU工作在内核态所花费的时间

real:指在此次事件中所花费的总时间

,0.0088371

整个GC所花费的时间,单位是秒

Full GC(Metadata GCThreshold):

括号中是gc发生的原因,原因:Metaspace区不够用了。

除此之外,还有另外两种情况会引起Full GC,如下:

1、Full GC(FErgonomics)

原因:JVM自适应调整导致的GC

2、Full GC(System)

原因:调用了System.gc()方法

[PSYoungGen: 100082K->0K(89600K)]

PSYoungGen:表示GC发生的区域,区域名称与使用的GC收集器是密切相关的

Serial收集器:Default New Generation 显示DefNew

ParNew收集器:ParNew

Parallel Scanvenge收集器:PSYoungGen

老年代和新生代同理,也是和收集器名称相关

ParOldGen:32K->9638K(204800K)

老年代区域没有发生GC,因此本次GC是metaspace引起的

[Meatspace:20158K->20156K(1067008K)],

metaspace GC 回收2K空间

3、GC日志分析工具

4、GC分类

4.1、FGC GC回收新生代和老年代,也有概述是整堆收集

4.2、YGC GC 回收新生代

4.3、触发GC

1>老年代空间不足

2>方法区空间不足

3>显示调佣System.gc()

4>Minior GC进入老年代的数据的平均大小 大于 老年代的可用内存()

5>大对象直接进入老年代。老年代空间不足

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 您可以通过以下步骤查看 JVM Full GC 的具体原因: 1. 首先,您需要在 JVM 启动时添加以下参数:-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -Xloggc:<log_file_path> 2. 然后,您需要分析生成的 GC 日志文件,查找 Full GC 的记录。 3. 在 Full GC 记录中,您可以查看以下信息: - Full GC 发生的原因,例如内存不足、永久代满、CMS GC 失败等。 - Full GC 前后堆内存的使用情况,以及 GC 前后各代内存的使用情况。 - Full GC 所花费的时间,以及 Full GC 后堆内存的使用情况。 通过分析这些信息,您可以确定 Full GC 的具体原因,并采取相应的措施来优化应用程序的性能。 ### 回答2: 查看JVM Full GC的具体原因可以通过以下步骤进行: 1. 监控工具:使用一些常见的JVM性能监控工具,如JConsole、VisualVM、Java Mission Control等。这些工具可以提供实时的JVM运行信息,其中包含Full GC的相关指标和堆内存的使用情况。 2. 日志分析:查看应用程序的日志文件,搜索其中包含GC的相关日志。根据GC日志中的时间戳、GC类型和相关指标(如堆内存的使用情况、对象生命周期等),可以进一步分析Full GC的原因。 3. 分析GC日志:当JVMGC日志被启用时,可以通过分析GC日志来了解Full GC的具体原因。GC日志中会记录GC活动的详细信息,包括GC类型、GC时间、GC前后堆内存的使用情况等。 4. 堆内存分析工具:使用一些堆内存分析工具,如Eclipse Memory Analyzer Tool(MAT),通过导入堆转储快照文件,可以分析堆内存中的对象分布、对象引用关系等,从而找出可能导致Full GC的原因。例如,一些内存泄漏或者大对象的创建可能导致堆内存不足,进而引发Full GC的发生。 5. JVM参数调整:根据分析结果,如果是堆内存不足导致Full GC的话,可以考虑调整JVM的相关参数,如-Xmx(最大堆大小)、-Xms(初始堆大小)等,增加堆内存的分配。 综上所述,通过使用监控工具、分析GC日志、堆内存分析工具以及调整JVM参数等方法,可以查看JVM Full GC的具体原因。 ### 回答3: 要查看JVM Full GC的具体原因,可以按照以下步骤进行: 1. 设置JVM日志级别:在启动JVM时,使用-XX:+PrintGCDetails或-XX:+PrintGCTimeStamps等参数,将JVMGC日志级别设置为详细模式。这样可以确保在日志中记录Full GC事件的详细信息。 2. 分析GC日志:定期检查和分析JVMGC日志。在GC日志中,Full GC事件通常以“Full GC”或“Full GC(System)”的形式出现。同时会显示一些关键信息,如Full GC消耗的时间、GC前后堆内存的情况等。 3. 查看GC原因:在GC日志中,找到Full GC事件的触发原因。可能的原因包括年轻代或老年代空间不足、永久代空间不足、老年代对象引用链过长等。根据Full GC事件的触发原因,可以进一步分析和解决问题。 4. 使用工具进行分析:可以使用一些专门的工具来分析GC日志,如GCViewer、GCMV等。这些工具可以图形化地展示GC事件的情况,包括GC发生的次数、GC消耗的时间、堆内存的变化等。通过这些工具,可以更直观地查看和分析Full GC的具体原因。 5. 进行性能调优:根据Full GC的具体原因,进行相应的性能调优操作。例如,如果是堆内存不足导致的Full GC,可以通过增加堆内存大小来解决问题;如果是对象引用链过长导致的Full GC,可以优化代码,减少对象间的引用链长度等。 通过以上方法,可以查看JVM Full GC的具体原因,并根据需要进行相应的优化和调整,以提高系统性能和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

追逐路上的小人物

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值