GC 日志分析

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 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  日志

640.png


Full GC 日志分析


640.png



JVM 参数设置



jvm 参数对应堆内存设置

640.png


比例设置

640.png




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的幂)


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
2月前
|
算法 安全 Java
(七)JVM成神路之GC分代篇:分代GC器、CMS收集器及YoungGC、FullGC日志剖析
在《GC基础篇》中曾谈到过分代以及分区回收的概念,但基础篇更多的是建立在GC的一些算法理论上进行高谈阔论,而本篇则重点会对于分代收集器的实现进行全面详解,其中会涵盖串行收集器、并行收集器、三色标记、SATB算法、GC执行过程、并发标记、CMS收集器等知识,本篇则偏重于分析GC机制的落地实现,也就是垃圾收集器(Garbage Collector)。
|
3月前
|
Java
GC日志打印
可以看到所有的FULL GC已经没有了,时间节省上面,大于是 0.03*3 约等于 0.1秒。
35 0
|
4月前
|
运维 监控 数据可视化
九、GC收集日志
九、GC收集日志
56 4
九、GC收集日志
|
4月前
|
算法 Java
深入理解JVM - 解读GC日志
深入理解JVM - 解读GC日志
81 0
|
4月前
|
存储 Java
jvm性能调优实战 - 23 模拟Young GC的发生及分析GC日志
jvm性能调优实战 - 23 模拟Young GC的发生及分析GC日志
94 0
|
10月前
|
Java
JVM学习笔记-如何在IDEA打印JVM的GC日志信息
若要在Idea上打印JVM相应GC日志,其实只需在Run/Debug Configurations上进行设置即可。
102 0
|
缓存 安全 Java
JVM中垃圾回收相关参数介绍:大页和NUMA参数+GC日志相关参数
大页和NUMA参数 本节介绍JVM为使用OS而提供的大页和NUMA特性相关的参数。 该参数控制JVM向OS请求内存时使用大页的粒度。使用该参数时需要对OS进行配置,只有OS允许时才能真正启动。参数的默认值与平台相关,一般为false。 在允许使用大页方式向OS请求内存时,如果堆空间小于该阈值,则强制禁止大页使用。该参数的默认值为128MB。 在允许使用大页方式向OS请求内存时,优先在本地节点进行分配。该参数仅适用于Windows系统。 在允许使用大页方式向OS请求内存时,如果OS提供了多种大页的设置,可通过该参数选择其中的大页设置。参数的默认值为0,表示使用OS默认的大页设置。
163 0
|
监控 数据可视化 Oracle
分析GC日志解读
分析GC日志解读
|
存储 Java C语言
JVM之GC日志解读
JVM之GC日志解读
|
机器学习/深度学习 编解码 监控
Java GC Log 分析工具
了解 GC Log (垃圾收集日志)并不是一件容易的事情,至少对于大多数技术人员而已。毕竟,对于这玩意,需要我们能够深入地了解 Java 虚拟机的工作原理以及对应用程序的内存使用情况的理解。在此篇文章中,我们将跳过应用程序的分析,因为它与应用程序的应用程序不同,并且需要对代码的知识。我们将讨论的是可以借助哪些工具使得我们能够读取和分析从 JVM 中获取的垃圾收集日志,以便正确定位问题。
291 0