概述
输出日志
-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/tmp/gc.log
日志回滚
-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/tmp/gc.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=3 -XX:GCLogFileSize=512k
-XX:UseGCLogFileRotation
开启日志回滚功能,-Xlogcs得设置,它才有效
-XX:NumberOfGCLogFiles
设置回滚日志的数量,必须大于0,格式:.0, .1, …, .n-1.
-XX:GCLogFileSize
每个日志文件的大小,最小为8k
-XX:+PrintGCDetails
输出GC日志
-XX:+PrintGCDateStamps
输出gc开始时的时间戳
日志内容分析
(这个还用Perm,应该是jdk8以前的,文章是否得补充各jdk各垃圾回收器的日志?)
2021-01-20T08:08:08.888-0800: 88.808:
[
Full GC [PSYoungGen: 1024K->100K(2048K)]
[PSOldGen: 1024k->1100K(2048K)]
2048->1200K(4096K)
[PSPermGen: 1024K->512K(2048K)],
3.4 secs
]
[Times: user=3.2 sys=0.2, real=3.4 secs]
2021-01-20T08:08:08.888-0800: 88.808 : 开始GC的时间;
Full GC: 垃圾回收类型
[PSYoungGen: 1024K->100K(2048K)] : 在年轻代GC后,年轻代内存使用从1M减少到100K,年轻代的总大小是2M。
[PSOldGen: 1024K->1100K(2048K)] : 在老年代GC后,老年代的内存使用从1M到1100K,在这个例子中为什么不减,反而增加了呢?因为年轻代对象到一定年龄后,会移到老年代,不一定都是这种情况的。老年代的总内存是2M。
2048K->1200K(4096K) : 在GC后,使用的内存从2M减少到1200K,分配的最大内存是4M。
[PSPermGen: 1024K->512K(2048K)] : 在GC之后,元数据区内存使用从1M降到512K,总的元数据大小是2M。
3.4 secs GC使用时间3.4秒。
[Times: user=3.2 sys=0.2, real=3.4 secs] 她所有 经过的时间,包括其它进程使用时间片以及进程阻塞的时间(如等待I/O完成)。
User: 用户是进程中用户模式代码(内核外部)所花费的CPU时间量。 这只是执行过程中使用的实际CPU时间。 其他流程以及该流程花费的时间被阻止,不计入该数字。
Sys: 是进程中在内核中花费的CPU时间量。 这意味着在内核内部执行系统调用所花费的CPU时间,而不是库代码仍在用户空间中运行。 像用户一样,这只是进程使用的CPU时间。 (对于这两段文字,我还是不能够完全得理解,应该是因为对CPU底层的逻辑还不了解)
参考
Understanding the Java Garbage Collection Log
Understanding Java Garbage Collection Logging: What Are GC Logs and How To Analyze Them
最后
以上就是健壮银耳汤为你收集整理的GC日志分析输出日志日志内容分析参考的全部内容,希望文章能够帮你解决GC日志分析输出日志日志内容分析参考所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复