开发者社区> hresh> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

JVM系列之:日志分析工具:GCViewer、VisualVM、GCeasy(一)

简介: JVM系列之:日志分析工具:GCViewer、VisualVM、GCeasy(二)
+关注继续查看

1.jpg

本文为《深入学习 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文件),看到类似这样一个界面。


2.jpg


GCViewer 有两个部分,其中显示了日志分析的结果。一个是左侧的图表,另一个是右侧的数据面板。下面将解释这些部分的内容。


图表


GCViewer 在图表(第一个选项卡)中显示多条线等,可以点击 View 按钮选择显示哪些线条,具体每个曲线的地方代表什么意思官网都讲的很清楚了。


其中黑色的竖线表示 Full GC,这样的线越少越好。就像上图所示,Full GC 后老年代并没有释放多少空间,所以才会抛出 OOM 异常。


数据面板


点击 Summary,


3.jpg


这里只挑几个重要的参数进行介绍:


  • Max heap after full GC:Full GC 后的堆内存大小
  • Total Time:GC 总耗时
  • Accumulated Pauses:GC 过程中暂停总时长
  • Throughput(吞吐量):上图显示是 86.8%,有些系统要求吞吐量至少为 90%,那么就说明需要进行 GC 优化。


点击 Pause,


4.jpg


  • 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 主页面如下所示,


5.jpg


要在 VisualVM 的配置文件中增加关于 JDK 的信息,否则后续关联本地执行程序对应的进程,可能出问题。


配置文件位于 /Resources/visualvm/etc 文件夹下,在 visualvm.conf 中增加如下配置:


visualvm_jdkhome="/Library/Java/JavaVirtualMachines/jdk1.8.0_301.jdk/Contents/Home"
复制代码


Overview


还是继续使用上文的本地案例,执行上述程序,在 VisualVM 页面左侧双击程序对应的进程,首先进入 Overview 页面。


6.jpg


该页面可以查看程序的基本情况,比如进程 ID、Main class、JDK 版本、启动参数等等。


Monitor


点击页面上的 Monitor,可以监控应用程序 CPU、堆、方法区、类加载和线程数的总体情况。如下图所示:


7.jpg


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


8.jpg


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


9.jpg


这里我们重点讲一下 heap dump 页面的内容,该页面又提供了5个基本功能页:summary、Objects、Threads、OQL Consle、R Console。


1、Summary 页面展示了当前内存的整体信息,包括内存大小 、实例总数、类总数等。

在上述页面还可以进行很多操作,比如点击“Classe上 by Size of Instances”下的 char[],进入详情页。


10.jpg


这个界面和 MAT 工具解析得到的内容很像,所以说 VisualVM 功能很强大。


我们再点击该页面上的 “GC Root”按钮,可以得到下述内容:


11.jpg


关于 char[] 对象的引用层次关系十分清晰。


2、Objects 页面中,显示了每个类的实例数占用空间。除此之外,还可以对比两个不同的内存快照文件,通过对比可以发现程序在运行的不同时刻,内存数据的变化,如下图所示。


12.jpg

13.jpg


如上所示,我们生成了两次内存快照,当前是在 24:50 时刻生成的,与 23:43 生成的做对比。


点击 OK 后,


14.jpg

可以发现在这段时间内,类对象实例个数具体增加了多少个。


3、在 Threads 页面中,可以看到线程的执行链路。


15.jpg


4、关于 OQL Consle、可知的是该面板是运行 OQL 查询语句的,是对 HeapDump 进行查询,类似于 SQL 的查询语言。OQL由3个部分组成:select 子句、from 子句和 where 子句。select 子句指定查询结果要显示的内容。from 子句指定查询范围,可指定类名,如java.lang.String、char[]、[Ljava.io.File;(File数组)。where子句用于指定查询条件。


这里简单测试一下,感兴趣的朋友可以再深入研究一下。


16.jpg


5、R Console 页面,这个是新加的窗口,支持 R 堆信息查看。


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
第4篇:Java的运算符详解
关系运算符的结果都是 boolean 类型(要么是 true,要么是 false) 关系表达式经常用在 if 结构的条件中或循环结构的条件中
21 0
憋了半个月的 PDF:精通 Java(二)
真诚的和大家说一句抱歉,因为最近家庭原因 + 我自己思想的懒惰,所以导致有一段时间没有更新技术文章,一直都在憋这一篇关于学习 Java 如何从入门到精通的文章,在没有发文的这段时间很煎熬,甚至无数次的想放弃写这篇文章,因为这篇文章不是很好写,我付出大量的时间和心血来收集大量的素材、研究大量的书本进而熔铸成这篇文章,希望对你有所帮助。
54 0
憋了半个月的 PDF:精通 Java(七)
真诚的和大家说一句抱歉,因为最近家庭原因 + 我自己思想的懒惰,所以导致有一段时间没有更新技术文章,一直都在憋这一篇关于学习 Java 如何从入门到精通的文章,在没有发文的这段时间很煎熬,甚至无数次的想放弃写这篇文章,因为这篇文章不是很好写,我付出大量的时间和心血来收集大量的素材、研究大量的书本进而熔铸成这篇文章,希望对你有所帮助。
71 0
JVM 性能监控工具 visualvm
JVM 性能监控工具 visualvm的详细介绍及使用
2678 0
【JVM】调优笔记2-----JVM在JDK1.8以后的新特性以及VisualVM的安装使用
一.JVM在新版本的改进更新以及相关知识 ? 1.JVM在新版本的改进更新 图中可以看到运行时常量池是放在方法区的   1.1对比:     JDK 1.7 及以往的 JDK 版本中,Java?类信息、常量池、静态变量都存储在 Perm(永久代)里。
1461 0
Java程序内存分析Java VisualVM(Visual GC)
VisualVM 是一款免费的\集成了多个JDK 命令行工具的可视化工具,它能为您提供强大的分析能力,对 Java 应用程序做性能分析和调优。这些功能包括生成和分析海量数据、跟踪内存泄漏、监控垃圾回收器、执行内存和 CPU 分析,同时它还支持在 MBeans 上进行浏览和操作。 在内存分析上,Java VisualVM的最大好处是可通过安装Visual GC插件来分析GC(Gabage Col
4001 0
GL_GL系列 - 会计期间管理分析(案例)
2014-07-07 Created By BaoXinjian 一、摘要 1. 在Oracle Erp中会计区分为以下六个, 一般在进行关账时,需对这个六个会计区间分别进行关闭 采购会计期间 库存会计期间 应收会计期间 应付会计期间 固定资产会计期间 总账会计期间 2.
1273 0
LogMiner日志分析工具的使用
1.安装logminer: ????? 要安装LogMiner工具,必须首先要运行下面这样两个脚本,????? $ORACLE_HOME/rdbms/admin/dbmslm.sql????? $ORACLE_HOME/rdbms/admin/dbmslmd.sql.????? 这两个脚本必须均以SYS用户身份运行。
730 0
日志分析工具
除了Logsufer外,其它此类工具还包括Webfwlog和WallFire项目的wflogs
538 0
+关注
hresh
分享技术,记录人生
文章
问答
文章排行榜
最热
最新
相关电子书
更多
JVM实战
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
http://www.vxiaotou.com