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

16年的时候花了一些时间整理了一些关于jvm的介绍文章,到如今回想起来还是一些还没有补充全面。当中就包含怎样利用工具来监控调优前后的性能变化。工具做为图形化界面来展示更能直观的发现问题,还有一方面一些耗费性能的分析(dump文件分析)一般也不会在生产直接分析。往往dump下来的文件达1G左右,人工分析效率较低,因此利用工具来分析jvm相关问题,长长能够到达事半功倍的效果来。

jvm监控分析工具一般分为两类,一种是jdk自带的工具。一种是第三方的分析工具。

jdk自带工具一般在jdk bin文件夹以下。以exe的形式直接点击就能够使用。当中包含分析工具已经非常强大,差点儿涉及了方方面面,可是我们最常使用的仅仅有两款:jconsole.exe和jvisualvm.exe;第三方的分析工具有非常多,各自的側重点不同。比較有代表性的:MAT(Memory Analyzer Tool)、GChisto等。

对于大型 JAVA 应用程序来说,再精细的測试也难以堵住全部的漏洞,即便我们在測试阶段进行了大量卓有成效的工作,非常多问题还是会在生产环境下暴露出来,而且非常难在測试环境中进行重现。

JVM 能够记录下问题发生时系统的部分执行状态,并将其存储在堆转储 (Heap Dump) 文件里,从而为我们分析和诊断问题提供了重要的根据。当中VisualVM和MAT是dump文件的分析利器。


jdk自带的工具


jconsole

Jconsole(Java Monitoring and Management Console)是从java5開始,在JDK中自带的java监控和管理控制台,用于对JVM中内存,线程和类等的监控。是一个基于JMX(java management extensions)的GUI性能监測工具。

jconsole使用jvm的扩展机制获取并展示虚拟机中执行的应用程序的性能和资源消耗等信息。

直接在jdk/bin文件夹下点击jconsole.exe就可以启动,界面例如以下:

在弹出的框中能够选择本机的监控本机的java应用。也能够选择远程的java服务来监控。假设监控远程服务须要在tomcat启动脚本中加入例如以下代码:

 -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,有的主要监控内存,有的监控线程等。

怎样安装:

1、从主菜单中选择“工具”>“插件”。


2、在“可用插件”标签中。选中该插件的“安装”复选框。单击“安装”。
3、逐步完毕插件安装程序。

我这里以 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/
版权归作者全部。转载请注明出处

原文地址:https://www.cnblogs.com/yjbjingcha/p/7267670.html