前言
工具做为图形化界面来展示更能直观的发现问题,另一方面一些耗费性能的分析(dump文件分析)一般也不会在生产直接分析,往往dump下来的文件达1G左右,人工分析效率较低,因此利用工具来分析jvm相关问题,长长可以到达事半功倍的效果来。
一、jvm监控分析工具种类
- 一种是jdk自带的工具:jdk bin目录下面,最常使用的只有两款:jconsole.exe和jvisualvm.exe;
- 一种是第三方的分析工具:分析工具有很多,各自的侧重点不同,比较有代表性的:MAT(Memory Analyzer Tool)、GChisto等。
二、jdk自带的工具----jconsole
2.1、简介
从java5开始,在JDK中自带的java监控和管理控制台,用于对JVM中内存,线程和类等的监控,是一个基于JMX(java management extensions)的GUI性能监测工具
2.2、启动
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
2.3、主要功能
- 概述:以图表的方式显示出堆内存使用量,活动线程数,已加载的类,CUP占用率的折线图
- 内存:主要展示了内存的使用情况,同时可以查看堆和非堆内存的变化值对比,也可以点击执行GC来处罚GC的执行
- 线程:展示线程数的活动数和峰值,同时点击左下方线程可以查看线程的详细信息。比如线程的状态、检测死锁 等
- 类:主要展示已加载类的相关信息。
- VM:JVM所有信息总览,包括基本信息、线程相关、堆相关、操作系统、VM参数等
- MBeans:查看Mbean的属性,方法等
三、jdk自带的工具----VisualVM
3.1 简介
VisualVM是javajdk自带的最牛逼的调优工具。提供了一个用于快速查看有关多个Java应用程序的数据的方式提供信息,以及捕获有关JVM软件实例的数据,并保存到本地系统,供后期查看或与其他用户共享。
3.2 启动
jdk/bin目录下面双击jvisualvm.exe
同时可以选择本地和远程(需要配置相关参数)
3.3 安装插件
每个插件的关注点都不同,有的主要监控GC,有的主要监控内存,有的监控线程等。
1、从主菜单中选择“工具”>“插件”。
2、在“可用插件”标签中,选中该插件的“安装”复选框。单击“安装”。
3、逐步完成插件安装程序。
3.4 常用插件讲解:监控、线程、Visual GC
- 监控的主页:cpu、内存、类、线程的图表
- 线程:和jconsole功能差不多
- Visual GC:可以看到年轻代、老年代的内存变化,以及gc频率、gc的时间等
- dump的内存快照分析
四、第三方调优工具----MAT
3.1 简介
一个基于Eclipse的内存分析工具,是一个快速、功能丰富的Java heap分析工具,它可以帮助我们查找内存泄漏和减少内存消耗。
和其他内存泄露分析工具相比,MAT 的使用非常容易,基本可以实现一键到位,即使是新手也能够很快上手使用。
3.2 使用
利用visualvm或者是 jmap命令生产堆文件,导入eclipse mat中生成分析报告
3.3 Actions、Reports、Step by Step区域
-
Histogram:列出内存中的对象,对象的个数以及大小,支持正则表达式查找,也可以计算出该类所有对象的retained size
-
Dominator Tree:列出最大的对象以及其依赖存活的Object
-
Top Consumers : 通过图形列出最大的object
-
duplicate classes :检测由多个类装载器加载的类
-
Leak Suspects :内存泄漏分析
-
Top Components: 列出大于总堆数的百分之1的报表。
-
Component Report:分析对象属于同一个包或者被同一个类加载器加载
以上只是一个初级的介绍,mat还有更强大的使用,比如对比堆内存,在生产环境中往往为了定位问题,每隔几分钟dump出一下内存快照,随后在对比不同时间的堆内存的变化来发现问题。
五、第三方调优工具----GC Easy
这是一个web工具,在线使用非常方便.
地址: http://gceasy.io
进入官网,讲打包好的zip或者gz为后缀的压缩包上传,过一会就会拿到分析结果。