上节介绍了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];//50kb
list.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机器上产生的垃圾回收日志文件