jvm系列(七):jvm调优-工具篇

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


jdk自带的工具


jconsole

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 性能

  • 概述,以图表的方式显示出堆内存使用量。活动线程数。已载入的类,CUP占用率的折线图,可以很是清晰的观察在程序执行过程当中的变更状况。

  • 内存,主要展现了内存的使用状况。同一时候可以查看堆和非堆内存的变化值对照。也可以点击执行GC来处罚GC的执行

  • 线程,主界面展现线程数的活动数和峰值。同一时候点击左下方线程可以查看线程的具体信息,比方线程的状态是什么,堆栈内容等,同一时候也可以点击“检測死锁”来检查线程之间是否有死锁的状况。

  • 类,主要展现已载入类的相关信息。
  • VM 概要,展现JVM所有信息总览,包含基本信息、线程相关、堆相关、操做系统、VM參数等。
  • Mbean,查看Mbean的属性。方法等。

VisualVM

简单介绍

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是什么?

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区域:

  • Histogram:列出内存中的对象,对象的个数以及大小,支持正則表達式查找,也可以计算出该类所有对象的retained size

  • Dominator Tree:列出最大的对象以及其依赖存活的Object (大小是以Retained Heap为标准排序的)

  • Top Consumers : 经过图形列出最大的object

  • duplicate classes :检測由多个类装载器载入的类

  • Leak Suspects :内存泄漏分析

  • Top Components: 列出大于总堆数的百分之1的报表。

  • Component Report:分析对象属于同一个包或者被同一个类载入器载入

以上仅仅是一个0基础的介绍,mat还有更强大的使用,比方对照堆内存,在生产环境中每每为了定位问题,每隔几分钟dump出一下内存快照,随后在对照不一样一时候间的堆内存的变化来发现问题。

GChisto

GChisto是一款专业分析gc日志的工具,可以经过gc日志来分析:Minor GC、full gc的时间、频率等等,经过列表、报表、图表等不一样的形式来反应gc的状况。尽管界面略显粗糙。但是功能仍是不错的。

配置好本地的jdk环境以后,双击GChisto.jar,在弹出的输入框中点击 add 选择gc.log日志

  • GC Pause Stats:可以查看GC 的次数、GC的时间、GC的开销、最大GC时间和最小GC时间等。以及对应的柱状图

  • GC Pause Distribution:查看GC停顿的具体分布,x轴表示垃圾收集停顿时间。y轴表示是停顿次数。

  • GC Timeline:显示整个时间线上的垃圾收集

只是这款工具已经再也不维护,不能识别最新jdk的日志文件。

gcviewer

GCViewer也是一款分析小工具。用于可视化查看由Sun / Oracle, IBM, HP 和 BEA Java 虚拟机产生的垃圾收集器的日志,gcviewer我的感受显示 的界面比較乱没有GChisto更专业一些。

以上的两款gc分析日志。一个不太维护了。一个不太专业。求推荐更好的gc分析工具

前期jvm系类文章回想:


做者:清纯的微笑
出处:http://www.ityouknow.com/
版权归做者所有。转载请注明出处

相关文章
相关标签/搜索