GC 日志分析

GC 日志分析

首先,如果需要查看 GC 日志,需要在 jvm 参数中加入如下参数

-XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xloggc:d:/GClogs/tomcat6-gc.log

GC 日志

2016-11-23T11:01:27.738+0800: 0.150: [GC [PSYoungGen: 331K->288K(5952K)] 331K->288K(19648K), 0.0006495 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
2016-11-23T11:01:27.739+0800: 0.152: [Full GC (System) [PSYoungGen: 288K->0K(5952K)] [PSOldGen: 0K->164K(13696K)] 288K->164K(19648K) [PSPermGen: 3054K->3054K(21248K)], 0.0059625 secs] [Times: user=0.00 sys=0.00, real=0.01 secs]
2016-11-23T11:01:27.852+0800: 0.264: [GC [PSYoungGen: 103K->64K(5952K)] 267K->228K(19648K), 0.0066830 secs] [Times: user=0.00 sys=0.00, real=0.01 secs]
2016-11-23T11:01:27.859+0800: 0.271: [Full GC (System) [PSYoungGen: 64K->0K(5952K)] [PSOldGen: 164K->165K(13696K)] 228K->165K(19648K) [PSPermGen: 3060K->3060K(21248K)], 0.0052429 secs] [Times: user=0.01 sys=0.00, real=0.01 secs]

Young GC 日志

image

Full GC 日志分析

image

JVM 参数设置

jvm 参数对应堆内存设置

image

比例设置

image

JVM 相关参数说明

堆分配参数

-Xmn10M:设置新生代区域大小为10M
-XX:NewSize=2M:设置新生代初始大小为2M
-XX:MaxNewSize=2M:设置新生代最大值为2M
(如果以上三个同时设置了,谁在后面谁生效。生产环境使用-Xmn即可,避免抖动)
-Xms128M:设置java程序启动时堆内存128M(默认为物理内存1/64,且小于1G)
-Xmx256M:设置最大堆内存256M,超出后会出现 OutOfMemoryError(默认为物理内存1/64,且小于1G)
(生产环境 -Xms 与 -Xmx 最好一样,避免抖动)
-Xss1M:设置线程栈的大小 1M(默认1M)
-XX:ThreadStackSize,-Xss 设置在后面,以-Xss为准;
-XX:ThreadStackSize设置在后面,主线程以 -Xss为准,其他线程以  -XX:ThreadStackSize为准
-XX:MinHeapFreeRatio=40:设置堆空间最小空闲比例(默认40)(当-Xmx与-Xms相等时,该配置无效)
-XX:MaxHeapFreeRatio=70:设置堆空间最大空闲比例(默认70)(当-Xmx与-Xms相等时,该配置无效)
-XX:NewRatio=2:设置年轻代与年老代的比例为2:1
-XX:SurvivorRatio=8:设置年轻代中eden区与survivor区的比例为8:1
-XX:MetaspaceSize=64M:设置元数据空间初始大小(取代-XX:PermSize)
-XX:MaxMetaspaceSize=128M:设置元数据空间最大值(取代之前-XX:MaxPermSize)
-XX:TargetSurvivorRatio=50:设置survivor区使用率。当survivor区达到50%时,将对象送入老年代
-XX:+UseTLAB:在年轻代空间中使用本地线程分配缓冲区(TLAB),默认开启
-XX:TLABSize=512k:设置TLAB大小为512k
-XX:+UseCompressedOops:使用压缩指针,默认开启
-XX:MaxTenuringThreshold=15:对象进入老年代的年龄(Parallel是15,CMS是6)

垃圾回收器相关

-XX:MaxGCPauseMillis:设置最大垃圾收集停顿时间(收集器工作时会调整其他参数大小,尽可能将停顿控制在指定时间内)
-XX:+UseAdaptiveSizePolicy:打开自适应GC策略(该摸式下,各项参数都会被自动调整)
-XX:+UseSerialGC:在年轻代和年老代使用串行回收器
-XX:+UseParallelGC:使用并行垃圾回收收集器,默认会同时启用 -XX:+UseParallelOldGC(默认使用该回收器)
-XX:+UseParallelOldGC:开启老年代使用并行垃圾收集器,默认会同时启用 -XX:+UseParallelGC
-XX:ParallelGCThreads=4:设置用于垃圾回收的线程数为4(默认与CPU数量相同)
-XX:+UseConcMarkSweepGC:使用CMS收集器(年老代)
-XX:CMSInitiatingOccupancyFraction=80:设置CMS收集器在年老代空间被使用多少后触发
-XX:+CMSClassUnloadingEnabled:允许对类元数据进行回收
-XX:+UseCMSInitiatingOccupancyOnly:只在达到阈值的时候,才进行CMS回收
-XX:+UseG1GC:使用G1回收器
-XX:G1HeapRegionSize=16m:使用G1收集器时设置每个Region的大小(范围1M - 32M)
-XX:MaxGCPauseMillis=500 :设置最大暂停时间(毫秒)
-XX:+DisableExplicitGC:禁止显示GC的调用(即禁止开发者的 System.gc();)

GC日志

-XX:+PrintGCDetails:打印GC信息
-XX:+PrintGCTimeStamps :打印每次GC的时间戳(现在距离启动的时间长度)
-XX:+PrintGCDateStamps :打印GC日期
-XX:+PrintHeapAtGC:每次GC时,打印堆信息
-Xloggc:/usr/local/tomcat/logs/gc.$$.log :GC日志存放的位置

堆快照

-XX:+HeapDumpOnOutOfMemoryError:出现内存溢出时存储堆信息,配合 -XX:HeapDumpPath 使用
-XX:HeapDumpPath=/usr/local/tomcat/logs/oom.%t.log:堆快照存储位置 
-XX:+UseLargePages:使用大页  
-XX:LargePageSizeInBytes=4m:指定大页的大小(必须为2的幂)

本文分享自微信公众号 - 程序员开发者社区(gh_016ffe40d550),作者:猿星人

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-04-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • JVM 优化思路

    Full GC 的成本远高于 Mirror GC 因此某些情况下,尽量让对象进入新生代,虽然大部分情况下,JVM 会尝试在 Eden 区分配对象,但是由于空间紧...

    王小明_HIT
  • Java 提供了哪些 IO 方式, NIO 如何实现多路复用

    Java IO 方式有很多种,基于不同的 IO 抽象模型和交互方式,可以进行简单区分。

    王小明_HIT
  • Java虚拟机--运行时数据区与内存溢出

    存放的数据是JVM加载的类信息,常量,静态变量和编译器编译后的代码等,这里要注意的是JDK1.8之后已经将这个方法区删除了,使用元空间,metaspace代...

    王小明_HIT
  • 海量网络连接服务端JVM参数调优实战过程

    以上三个特点导致有大量小对象聚集在old区,高峰期old区域增长非常快,对象在一段时间内必然消亡

    涤生
  • JVM又爆了,别傻傻只会重启加内存!

    前提:某大型跨境电商业务发展非常快,线上机器扩容也很频繁,但是对于线上机器的运行情况,特别是jvm内存的情况,一直没有一个统一的标准来给到各个应用服务的owne...

    Java技术栈
  • java架构之路-(JVM优化与原理)JVM之G1回收器和常见参数配置

      过去的几天里,我把JVM内部的垃圾回收算法和垃圾回收器。还剩下最后一个G1回收器没有说,我们今天数一下G1回收器和常见的参数配置。

    小菜的不能再菜
  • 常用的JVM调优参数总结汇总【随时查阅学习】

    表示设置JVM启动内存的最大值为20M,必须以M为单位。将-Xmx和-Xms设置为一样可以避免JVM内存自动扩展。大的项目-Xmx和-Xms一般都要设置到10G...

    小勇DW3
  • JVM系列三:JVM参数设置、分析

    不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的选择不同的GC策略,调整JVM、GC的参数,可以极大的减少由于GC工作,而导...

    lyb-geek
  • 容器重启23次,原因竟然是。。。。

    最烦的事情,莫过于服务莫名其妙的重启,当你看到一个服务一天重启23次,你会是怎样的一个感觉,反正博主我快要摔电脑了。。。。

    林老师带你学编程
  • 年终总结该怎么写?数据分析师特供版

    有同学问:老师,到了年终写总结的时候,就发现自己写的总结很平淡。有些在别人看起来是亮点的,自己写起来效果一般。请问下,到底要咋写?

    接地气的陈老师

扫码关注云+社区

领取腾讯云代金券