第一步: 为JVM 添加GC日志输出
-verbosegc //输出每次垃圾回收的信息
-XX:+PrintGCDetails //输出更详细的信息
-Xloggc:garbage-collection.vgc // 输出GC日志文件(:后是文件名,vgc 用于HPjmeter)
-XX:+PrintGCTimeStamps //输出时间戳信息
第二步:启动JVM
生成的日志大概如此:
Java HotSpot(TM) 64-Bit Server VM (25.77-b03) for linux-amd64 JRE (1.8.0_77-b03), built on Mar 20 2016 22:00:46 by "java_re" with gcc 4.3.0 20080428 (Red Hat 4.3.0-8)
Memory: 4k page, physical 8045732k(1087904k free), swap 8255484k(4703448k free)
CommandLine flags: -XX:InitialHeapSize=128731712 -XX:MaxHeapSize=2059707392 -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseParallelGC
0.434: [GC (Allocation Failure) [PSYoungGen: 31744K->3575K(36864K)] 31744K->3583K(121856K), 0.0072076 secs] [Times: user=0.01 sys=0.01, real=0.01 secs]
0.790: [GC (Allocation Failure) [PSYoungGen: 35319K->4591K(68608K)] 35327K->4671K(153600K), 0.0051550 secs] [Times: user=0.02 sys=0.00, real=0.01 secs]
1.177: [GC (Allocation Failure) [PSYoungGen: 68079K->5114K(68608K)] 68159K->10934K(153600K), 0.0167498 secs] [Times: user=0.03 sys=0.00, real=0.02 secs]
1.463: [GC (Allocation Failure) [PSYoungGen: 68602K->5094K(132096K)] 74422K->15569K(217088K), 0.0107074 secs] [Times: user=0.03 sys=0.00, real=0.01 secs]
1.802: [GC (Allocation Failure) [PSYoungGen: 132070K->5098K(132096K)] 142545K->19891K(217088K), 0.0145482 secs] [Times: user=0.04 sys=0.01, real=0.01 secs]
1.908: [GC (Metadata GC Threshold) [PSYoungGen: 32048K->7065K(266240K)] 46841K->21866K(351232K), 0.0097685 secs] [Times: user=0.04 sys=0.00, real=0.01 secs]
从这些信息里你也可以看到JVM 用的哪个收集器等信息
第三步: 分析日志
下载 HPjmeter:HPjmeter ps: 下载最新版,要注册账号之后才能下载
open file:
从图中你就可以看到 每一次垃圾回收对应的时间,收集的频率等信息。然后进行进一步相关的条优
说明
这里只介绍了简单的步骤,详细信息包括为什么等内容可以参考下面的链接: