上节介绍了GC日志的打印及含义,但是Gc日志看起来比较麻烦,本节将会介绍一下GC日志可视化分析工具GCeasy和GCviewer等。通过Gc日志可视化分析工具,我们可以很方便的看到JVM各个分代的内存使用情况、垃圾回收次数、垃圾回收的原因、垃圾回收占用的时间、吞吐量等,这些指标在我们进行JVM调优的时候是很有用的。
如果想把GC日志存到文件的话,是下面这个参数:
-Xloggc:/path/to/gc.log
然后就可以用一些工具去分析这些gc日志。
代码例子:
package studies.oom;import jdk.internal.org.objectweb.asm.ClassWriter;import jdk.internal.org.objectweb.asm.Opcodes;/*** @Date: 2021/5/27* @Time: 8:23* @BelongsProject base* @BelongsPackage studies.oom* java.Lang.outofMemoryError: Metaspace异常演示:* -Xms60m -Xmx60m -XX:MetaspaceSize=10m -XX:MaxMetaspaceSize=10m -XX:SurvivorRatio=8 -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -Xloggc:d:/metaspaceOOM.log* 配置上面的设置可以生成GC日志文件*/public class MetaspaceOOM extends ClassLoader{public static void main(String[] args) {int j = 0;try {MetaspaceOOM test = new MetaspaceOOM();for (int i = 0; i < 10000; i++){//创建CLasswriter对象,用于生成类的二进制字节码ClassWriter classWriter = new ClassWriter(0);//指明版本号,修饰符,类名,包名,父类,接口classWriter.visit(Opcodes.V1_8,Opcodes.ACC_PUBLIC,"Class"+i,null,"java/lang/Object",null);//返回byte[]byte[] code = classWriter.toByteArray();//类的加载,Class对象test.defineClass("Class"+i,code,0,code.length);}}finally {System.out.println(j);}}}
package com.study.oom;/*** 测试生成详细的日志文件* -Xms60m -Xmx60m -XX:SurvivorRatio=8 -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC* -Xloggc:d:/GCLogTest.log*/import java.util.ArrayList;public class GCLogTest {public static void main(String[] args) {ArrayList<byte[]> list = new ArrayList<>();for (int i = 0; i < 5000; i++){byte[] arr = new byte[1024 * 50];//50kblist.add(arr);try {Thread.sleep(30);} catch (InterruptedException e) {e.printStackTrace();}}}}
一、GCeasy
基本概述
GCeasy—一款超好用的在线分析GC日志的网站
官网地址: https://gceasy.io/ GCeasy是一款在线的GC日志分析器,可以通过GC日志分析进行内存泄漏检测、GC暂停原因分析、JVM配置建议优化等功能,而且是可以免费使用的(有一些服务是收费的)。

二、GCViewer
2.1-基本情况
上面介绍了一款在线的Gc日志分析器,下面介绍一个离线版的GCViewer。
GCViewer是一个免费的、开源的分析小工具,用于可视化查看由SUN/oracle,IBM,HP和BEA,Java虚拟机产生的垃圾收集器的日志。
GCViewer用于可视化Java VM选项-verbose:gc和.NET生成的数据-Xloggc:
2.2-安装
1.下载GCViewer工具
源码下载: https://github.com/chewiebug/GCViewer
运行版本下载: https://github.com/chewiebug/GCViewer/wiki/Changelog
2.只需双击gcviewer-1.3x.jar或运行java -jar gcviewer-1.3x.jar(它需要运行java1.8 vm),即可启动GcViewer (gui)
三、其他工具
GChisto
官网上没有下载的地方,需要自己从SVN上拉下来编译不过这个工具似乎没怎么维护了,存在不少bug
HPjmeter
工具很强大,但只能打开由以下参数生成的GC log,-verbose:gc-Xloggc:gc.log。添加其他参数生成的gc.log无法打开
HPjmeter集成了以前的HPjtune功能,可以分析在HP机器上产生的垃圾回收日志文件
