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

摘要:
它包括如何在调优前后使用工具监视性能更改。当问题发生时,JVM可以记录系统的部分执行状态。在JDK中内置的Java监控和管理控制台中,jconsole使用jvm的扩展机制来获取和显示虚拟机中执行的应用程序的性能和资源消耗等信息。在弹出框中,您可以选择本机监视本机java应用程序。假设监控远程服务需要在tomcat启动脚本中添加以下代码:同时单击左下角的线程以查看线程的特定信息。

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就可以启动,界面例如以下:

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

在弹出的框中能够选择本机的监控本机的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占用率的折线图,能够非常清晰的观察在程序执行过程中的变动情况。

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

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

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

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

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

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

VisualVM

简单介绍

VisualVM 是一个工具,它提供了一个可视界面,用于查看 Java 虚拟机 (Java Virtual Machine, JVM) 上执行的基于 Java 技术的应用程序(Java 应用程序)的具体信息。VisualVM 对 Java Development Kit (JDK) 工具所检索的 JVM 软件相关数据进行组织,并通过一种使您能够高速查看有关多个 Java 应用程序的数据的方式提供该信息。您能够查看本地应用程序以及远程主机上执行的应用程序的相关数据。此外。还能够捕获有关 JVM 软件实例的数据,并将该数据保存到本地系统。以供后期查看或与其他用户共享。

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

VisualVM 是javajdk自带的最牛逼的调优工具了吧。也是我平时使用最多调优工具,差点儿涉及了jvm调优的方方面面。相同是在jdk/bin文件夹以下双击jvisualvm.exe既可使用,启动起来后和jconsole 一样相同能够选择本地和远程。假设须要监控远程相同须要配置相关參数,主界面例如以下;

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

VisualVM能够根据须要安装不同的插件,每一个插件的关注点都不同。有的主要监控GC,有的主要监控内存,有的监控线程等。

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

怎样安装:

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


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

我这里以 Eclipse(pid 22296)为例。双击后直接展开,主界面展示了系统和jvm两大块内容。点击右下方jvm參数和系统属性能够參考具体的參数信息.

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

由于VisualVM的插件太多。我这里主要介绍三个我主要使用几个:监控、线程、Visual GC

监控的主页事实上也就是。cpu、内存、类、线程的图表

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

线程和jconsole功能没有太大的差别

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

Visual GC 是常用的一个功能,能够明显的看到年轻代、老年代的内存变化,以及gc频率、gc的时间等。

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

以上的功能事实上jconsole差点儿也有。VisualVM更全面更直观一些,另外VisualVM非常多的其他功能,能够分析dump的内存快照,dump出来的线程快照而且进行分析等,还有其他非常多的插件大家能够去探索

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

第三方调优工具

MAT

MAT是什么?

MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具,是一个高速、功能丰富的Java heap分析工具,它能够帮助我们查找内存泄漏和降低内存消耗。

使用内存分析工具从众多的对象中进行分析,高速的计算出在内存中对象的占用大小,看看是谁阻止了垃圾收集器的回收工作,并能够通过报表直观的查看到可能造成这样的结果的对象。

通常内存泄露分析被觉得是一件非常有难度的工作,一般由团队中的资深人士进行。只是要介绍的 MAT(Eclipse Memory Analyzer)被觉得是一个“傻瓜式“的堆转储文件分析工具,你仅仅须要轻轻点击一下鼠标就能够生成一个专业的分析报告。和其他内存泄露分析工具相比。MAT 的使用非常easy,基本能够实现一键到位,即使是新手也能够非常快上手使用。

MAT以eclipse 插件的形式来安装,具体的安装过程就不在描写叙述了。能够利用visualvm或者是 jmap命令生产堆文件,导入eclipse mat中生成分析报告:

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

生产这会报表的同一时候也会在dump文件的同级文件夹下生成三份(dump_Top_Consumers.zip、dump_Leak_Suspects.zip、dump_Top_Components.zip)分析结果的html文件,方便发送给相关同事来查看。

须要关注的是以下的Actions、Reports、Step by Step区域:

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

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

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

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

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

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

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

  • Leak Suspects :内存泄漏分析

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

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

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

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

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

GChisto

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

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

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

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

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

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

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

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

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

gcviewer

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

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

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

前期jvm系类文章回想:


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

免责声明:文章转载自《jvm系列(七):jvm调优-工具篇》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇xshell连接linux,切换焦点,自动执行ctrl+cIDEA中设置自动build-改动代码,不用重启工程,刷新页面即可下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

JVM启动参数详解 (转)

非标准参数 非标准参数又称为扩展参数,其列表如下:-Xint设置jvm以解释模式运行,所有的字节码将被直接执行,而不会编译成本地码。-Xbatch关闭后台代码编译,强制在前台编译,编译完成之后才能进行代码执行;默认情况下,jvm在后台进行编译,若没有编译完成,则前台运行代码时以解释模式运行。-Xbootclasspath:bootclasspath让jv...

JVM:查看java内存情况命令

  jmap (linux下特有,也是很常用的一个命令)   观察运行中的jvm物理内存的占用情况。   参数如下:   -heap :打印jvm heap的情况   -histo: 打印jvm heap的直方图。其输出信息包括类名,对象数量,对象占用大小。   -histo:live : 同上,但是只答应存活对象的情况   -permstat: 打印pe...

linux文件名乱码解决办法

1、linux解压压缩文件乱码 unzip -O CP936 xxx.zip 2、一般文件用convmv sudo convmv -f gbk -t utf-8 -r --notest /your_directory 就是将/your_directory目录下原来文件名是gbk编码方式的全部改为utf-8格式的。这里 -f 后面为原来的编码方式,-t 后...

Java虚拟机介绍

Java虚拟机概述 Java虚拟机(JavaVirtualMachine)简称JVMJava虚拟机是一个想象中的机器,在实际的计算机上通过软件模拟来实现。Java虚拟机有自己想象中的硬件,如处理器、堆栈、寄存器等,还具有相应的指令系统。下面我们就来看一下这几部分比较重要的java虚拟机的结构 一、JVM寄存器 所有的CPU均包含用于保存系统状...

键盘输入、鼠标输入、焦点处理

一、键盘类和键盘事件 WPF提供了基础的键盘类(System.Input.Keyboard类),该类提供与键盘相关的事件、方法和属性,这些事件、方法和属性提供有关键盘状态的信息。Keyboard的事件也通过UIElement等XAML基元素类的事件向外提供。 对于键盘操作,其常用的事件有两组: KeyDown事件和PreviewKeyDown事件:处理键...

交叉编译工具链的安装

一、参考网址   1. Ubuntu18.04使用x86(32位)交叉编译工具链   2. error while loading shared libraries: libstdc++.so.6 二、实践   1. 安装交叉编译器arm-linux-gcc-3.3.2     1.1 下载arm-linux-gcc-3.3.2.tar.bz2 到任意的目录...