16年的时候花了一些时间整理了一些关于jvm的介绍文章,到现在回想起来仍是一些尚未补充全面。当中就包含怎样利用工具来监控调优先后的性能变化。工具作为图形化界面来展现更能直观的发现问题,还有一方面一些耗费性能的分析(dump文件分析)通常也不会在生产直接分析。每每dump下来的文件达1G左右,人工分析效率较低,所以利用工具来分析jvm相关问题,长长可以到达事半功倍的效果来。html
jvm监控分析工具通常分为两类,一种是jdk自带的工具。一种是第三方的分析工具。java
jdk自带工具通常在jdk bin文件夹如下。以exe的形式直接点击就可以使用。当中包含分析工具已经很是强大,差点儿涉及了方方面面,但是咱们最常使用的仅仅有两款:jconsole.exe和jvisualvm.exe;第三方的分析工具备很是多,各自的側重点不一样。比較有表明性的:MAT(Memory Analyzer Tool)、GChisto等。算法
对于大型 JAVA 应用程序来讲,再精细的測试也难以堵住所有的漏洞,即使咱们在測试阶段进行了大量卓有成效的工做,很是多问题仍是会在生产环境下暴露出来,并且很是难在測试环境中进行重现。tomcat
JVM 可以记录下问题发生时系统的部分执行状态,并将其存储在堆转储 (Heap Dump) 文件里,从而为咱们分析和诊断问题提供了重要的根据。当中VisualVM和MAT是dump文件的分析利器。markdown
Jconsole(Java Monitoring and Management Console)是从java5開始,在JDK中自带的java监控和管理控制台,用于对JVM中内存,线程和类等的监控。是一个基于JMX(java management extensions)的GUI性能监測工具。eclipse
jconsole使用jvm的扩展机制获取并展现虚拟机中执行的应用程序的性能和资源消耗等信息。jvm
直接在jdk/bin文件夹下点击jconsole.exe就能够启动,界面例如如下:工具
在弹出的框中可以选择本机的监控本机的java应用。也可以选择远程的java服务来监控。假设监控远程服务需要在tomcat启动脚本中加入例如如下代码:post
-Dcom.sun.management.jmxremote.port=6969
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
链接进去以后。就可以看到jconsole概览图和基本的功能:概述、内存、线程、类、VM、MBeans 性能
简单介绍
VisualVM 是一个工具,它提供了一个可视界面,用于查看 Java 虚拟机 (Java Virtual Machine, JVM) 上执行的基于 Java 技术的应用程序(Java 应用程序)的具体信息。VisualVM 对 Java Development Kit (JDK) 工具所检索的 JVM 软件相关数据进行组织,并经过一种使您可以高速查看有关多个 Java 应用程序的数据的方式提供该信息。您可以查看本地应用程序以及远程主机上执行的应用程序的相关数据。此外。还可以捕获有关 JVM 软件实例的数据,并将该数据保存到本地系统。以供后期查看或与其余用户共享。
VisualVM 是javajdk自带的最牛逼的调优工具了吧。也是我平时使用最多调优工具,差点儿涉及了jvm调优的方方面面。相同是在jdk/bin文件夹如下双击jvisualvm.exe既可以使用,启动起来后和jconsole 同样相同可以选择本地和远程。假设需要监控远程相同需要配置相关參数,主界面例如如下;
VisualVM可以根据需要安装不一样的插件,每个插件的关注点都不一样。有的主要监控GC,有的主要监控内存,有的监控线程等。
怎样安装:
一、从主菜单中选择“工具”>“插件”。
二、在“可用插件”标签中。选中该插件的“安装”复选框。单击“安装”。
三、逐步完毕插件安装程序。
我这里以 Eclipse(pid 22296)为例。双击后直接展开,主界面展现了系统和jvm两大块内容。点击右下方jvm參数和系统属性可以參考具体的參数信息.
因为VisualVM的插件太多。我这里主要介绍三个我主要使用几个:监控、线程、Visual GC
监控的主页事实上也就是。cpu、内存、类、线程的图表
线程和jconsole功能没有太大的差异
Visual GC 是经常使用的一个功能,可以明显的看到年轻代、老年代的内存变化,以及gc频率、gc的时间等。
以上的功能事实上jconsole差点儿也有。VisualVM更全面更直观一些,另外VisualVM很是多的其余功能,可以分析dump的内存快照,dump出来的线程快照并且进行分析等,还有其余很是多的插件你们可以去探索
MAT是什么?
MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具,是一个高速、功能丰富的Java heap分析工具,它可以帮助咱们查找内存泄漏和下降内存消耗。
使用内存分析工具从众多的对象中进行分析,高速的计算出在内存中对象的占用大小,看看是谁阻止了垃圾收集器的回收工做,并可以经过报表直观的查看到可能形成这样的结果的对象。
一般内存泄露分析被以为是一件很是有难度的工做,通常由团队中的资深人士进行。只是要介绍的 MAT(Eclipse Memory Analyzer)被以为是一个“傻瓜式“的堆转储文件分析工具,你仅仅需要轻轻点击一下鼠标就可以生成一个专业的分析报告。和其余内存泄露分析工具相比。MAT 的使用很是easy,基本可以实现一键到位,即便是新手也可以很是快上手使用。
MAT以eclipse 插件的形式来安装,具体的安装过程就不在描写叙述了。可以利用visualvm或者是 jmap命令生产堆文件,导入eclipse mat中生成分析报告:
生产这会报表的同一时候也会在dump文件的同级文件夹下生成三份(dump_Top_Consumers.zip、dump_Leak_Suspects.zip、dump_Top_Components.zip)分析结果的html文件,方便发送给相关同事来查看。
需要关注的是如下的Actions、Reports、Step by Step区域:
duplicate classes :检測由多个类装载器载入的类
Leak Suspects :内存泄漏分析
以上仅仅是一个0基础的介绍,mat还有更强大的使用,比方对照堆内存,在生产环境中每每为了定位问题,每隔几分钟dump出一下内存快照,随后在对照不一样一时候间的堆内存的变化来发现问题。
GChisto是一款专业分析gc日志的工具,可以经过gc日志来分析:Minor GC、full gc的时间、频率等等,经过列表、报表、图表等不一样的形式来反应gc的状况。尽管界面略显粗糙。但是功能仍是不错的。
配置好本地的jdk环境以后,双击GChisto.jar,在弹出的输入框中点击 add 选择gc.log日志
GC Pause Distribution:查看GC停顿的具体分布,x轴表示垃圾收集停顿时间。y轴表示是停顿次数。
GC Timeline:显示整个时间线上的垃圾收集
只是这款工具已经再也不维护,不能识别最新jdk的日志文件。
GCViewer也是一款分析小工具。用于可视化查看由Sun / Oracle, IBM, HP 和 BEA Java 虚拟机产生的垃圾收集器的日志,gcviewer我的感受显示 的界面比較乱没有GChisto更专业一些。
以上的两款gc分析日志。一个不太维护了。一个不太专业。求推荐更好的gc分析工具
前期jvm系类文章回想:
做者:清纯的微笑
出处:http://www.ityouknow.com/
版权归做者所有。转载请注明出处