文章目录
GC日志
对于java应用我们可以通过一些配置把程序运行过程中的gc日志全部打印出来,然后分析gc日志得到关键性指标,分析 GC原因,调优JVM参数。
打印GC日志方法,在JVM参数里增加参数
‐XX:+PrintGCDetails
‐XX:+PrintGCTimeStamps
‐XX:+PrintGCDateStamps
‐Xloggc:./gc.log
Tomcat则直接加在JAVA_OPTS变量里。
如何分析GC日志
打印gc日志
启动一个java程序,加入以上参数
java -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -Xloggc:./gc.log -jar application.jar
分析GC日志
下图中是截取的JVM刚启动的一部分GC日志 。
CommandLine flags: -XX:InitialHeapSize=198572224 -XX:MaxHeapSize=3177155584 -XX:+PrintGC -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC
我们可以看到图中第一行红框,是项目的配置参数。这里不仅配置了打印GC日志,还有相关的VM内存参数。
2019-09-30T14:57:12.993+0800: 4.615: [Full GC (Metadata GC Threshold) [PSYoungGen: 3104K->0K(200704K)] [ParOldGen: 3407K->6253K(80896K