本文为《深入学习 JVM 系列》第二十四篇文章
GCViewer
GCViewer 是一个可以将 JVM 中的 gc log 可视化的工具,使用该工具可以帮助你充分的发现 JVM 垃圾回收中的潜在问题,让你可以更加准确的做出关于 JVM GC 优化的决策。
安装并启动
git clone https://github.com/chewiebug/GCViewer.git
//或者用 IDEA打开项目后,用 maven进行打包
mvn clean pacakge
//得到一个 jar包
cd target
java -jar gcviewer-1.36.jar
导出 gc log
如果是本地程序,比如还是上述 OutOfMemoryTest 文件中的代码,可以修改 JVM 参数如下:
-Xms60M -Xmx60M -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/Users/xxx/Documents/logs/gc.log
如果是 SpringBoot 项目,直接使用java -jar的方式启动,那么开启 gc log 的方式非常简单。只需要在启动命令加如下参数,就可以在启动目录中找到gc.log的文件。
java -Xloggc:gc.log -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -jar mybatis-generator-1.0-SNAPSHOT.jar
如果是传统的 Web 部署方式,放到 tomcat 里面启动,那么可以通过修改 bin/catalina.sh 这个文件来开启 gc log。
JAVA_OPTS='-Xloggc:/tmp/gc.log -XX:+PrintGCTimeStamps -XX:+PrintGCDetails'
日志分析
GCViewer 启动后,打开我们获得的 gc log 文件(这里打开是本地程序导出的 log文件),看到类似这样一个界面。

GCViewer 有两个部分,其中显示了日志分析的结果。一个是左侧的图表,另一个是右侧的数据面板。下面将解释这些部分的内容。
图表
GCViewer 在图表(第一个选项卡)中显示多条线等,可以点击 View 按钮选择显示哪些线条,具体每个曲线的地方代表什么意思官网都讲的很清楚了。
其中黑色的竖线表示 Full GC,这样的线越少越好。就像上图所示,Full GC 后老年代并没有释放多少空间,所以才会抛出 OOM 异常。
数据面板
点击 Summary,

这里只挑几个重要的参数进行介绍:
-
Max heap after full GC:Full GC 后的堆内存大小
-
Total Time:GC 总耗时
-
Accumulated Pauses:GC 过程中暂停总时长
-
Throughput(吞吐量):上图显示是 86.8%,有些系统要求吞吐量至少为 90%,那么就说明需要进行 GC 优化。
点击 Pause,

-
Accumulated Pauses:GC 过程中暂停总时长
-
Number of Pauses:暂停总次数
-
Avg Pause:平均暂停时间
-
Avg pause interval:平均暂停的间隔时间
如果你的 Full GC 平均的暂停时间很长(大于1s),或者平均暂停间隔非常的短(小于10s),说明可能你的 GC 回收是有问题的,可能需要优化。
Java VisualVM
VisualVM 是一个功能强大的多合一故障诊断和性能监控的可视化工具,它集成了多种性能统计工具的功能,使用 VisualVM 可以代替 jstat、jmap、jhat、jstack。VisualVM 可以作为独立的软件安装。
VisualVM 主页面如下所示,

要在 VisualVM 的配置文件中增加关于 JDK 的信息,否则后续关联本地执行程序对应的进程,可能出问题。
配置文件位于 /Resources/visualvm/etc 文件夹下,在 visualvm.conf 中增加如下配置:
visualvm_jdkhome="/Library/Java/JavaVirtualMachines/jdk1.8.0_301.jdk/Contents/Home"
Overview
还是继续使用上文的本地案例,执行上述程序,在 VisualVM 页面左侧双击程序对应的进程,首先进入 Overview 页面。

该页面可以查看程序的基本情况,比如进程 ID、Main class、JDK 版本、启动参数等等。
Monitor
点击页面上的 Monitor,可以监控应用程序 CPU、堆、方法区、类加载和线程数的总体情况。如下图所示:

点击“Perform GC”和“Heap Dump”按钮还可以手动执行 Full GC 和生成堆快照,比如说点击“Heap Dump”按钮,得到下述图片:

上述堆 dump 还可以通过这种方式查看,右键菜单中的 “Heap Dump“,

这里我们重点讲一下 heap dump 页面的内容,该页面又提供了5个基本功能页:summary、Objects、Threads、OQL Consle、R Console。
1、Summary 页面展示了当前内存的整体信息,包括内存大小 、实例总数、类总数等。
在上述页面还可以进行很多操作,比如点击“Classe上 by Size of Instances”下的 char[],进入详情页。

这个界面和 MAT

本文详细介绍了JVM性能优化中的关键工具,包括GCViewer、VisualVM和GCeasy的使用。通过这些工具,可以分析GC日志、监控内存和线程状态,识别潜在的性能问题。GCViewer用于可视化GC日志,帮助识别Full GC的频率和影响;VisualVM提供多合一的故障诊断和性能监控,包括CPU和内存采样、线程分析等功能;GCeasy则是一款在线GC日志分析平台,支持内存泄漏检测和GC优化建议。通过这些工具,开发者可以更有效地进行JVM调优。
最低0.47元/天 解锁文章
6838

被折叠的 条评论
为什么被折叠?



