Java基础 (六) | Jvm 调优-工具篇

Scroll Down

前言

工具做为图形化界面来展示更能直观的发现问题,另一方面一些耗费性能的分析(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即可启动,界面如下:
image.png
可以选择本机的监控本机的java应用,也可以选择远程的java服务来监控,如果监控远程服务需要在tomcat启动脚本中添加如下代码:

-Dcom.sun.management.jmxremote.port=6969  
-Dcom.sun.management.jmxremote.ssl=false  
-Dcom.sun.management.jmxremote.authenticate=false

2.3、主要功能

  • 概述:以图表的方式显示出堆内存使用量,活动线程数,已加载的类,CUP占用率的折线图
    image.png
  • 内存:主要展示了内存的使用情况,同时可以查看堆和非堆内存的变化值对比,也可以点击执行GC来处罚GC的执行
    FA5175C18F26497DA93499C09BE158BA.png
  • 线程:展示线程数的活动数和峰值,同时点击左下方线程可以查看线程的详细信息。比如线程的状态、检测死锁 等
    2643FF55E6E5437ABF5ABE7C45F0562B.png
  • 类:主要展示已加载类的相关信息。
  • VM:JVM所有信息总览,包括基本信息、线程相关、堆相关、操作系统、VM参数等
  • MBeans:查看Mbean的属性,方法等

三、jdk自带的工具----VisualVM

3.1 简介

VisualVM是javajdk自带的最牛逼的调优工具。提供了一个用于快速查看有关多个Java应用程序的数据的方式提供信息,以及捕获有关JVM软件实例的数据,并保存到本地系统,供后期查看或与其他用户共享。

3.2 启动

jdk/bin目录下面双击jvisualvm.exe
同时可以选择本地和远程(需要配置相关参数)
C374194B03E14FBAB2A460682A2B2B12.png

3.3 安装插件

每个插件的关注点都不同,有的主要监控GC,有的主要监控内存,有的监控线程等。

1、从主菜单中选择“工具”>“插件”。
2、在“可用插件”标签中,选中该插件的“安装”复选框。单击“安装”。
3、逐步完成插件安装程序。

3.4 常用插件讲解:监控、线程、Visual GC

  • 监控的主页:cpu、内存、类、线程的图表
    image.png
  • 线程:和jconsole功能差不多
    41B3D4BD1DA44A3BAA5E817D49FC1B2F.png
  • Visual GC:可以看到年轻代、老年代的内存变化,以及gc频率、gc的时间等
    F4D6177F8EA34CEE97B60CE4CA4AB8AC.png
  • dump的内存快照分析
    3EC0CF74580241FDBBBA5C6245E2B5D0.png

四、第三方调优工具----MAT

3.1 简介

一个基于Eclipse的内存分析工具,是一个快速、功能丰富的Java heap分析工具,它可以帮助我们查找内存泄漏和减少内存消耗。
和其他内存泄露分析工具相比,MAT 的使用非常容易,基本可以实现一键到位,即使是新手也能够很快上手使用。

3.2 使用

利用visualvm或者是 jmap命令生产堆文件,导入eclipse mat中生成分析报告
EF14F6E69FD74060B8CFBF100620F7BF.png

3.3 Actions、Reports、Step by Step区域

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

  • Dominator Tree:列出最大的对象以及其依赖存活的Object
    image.png

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

  • duplicate classes :检测由多个类装载器加载的类

  • Leak Suspects :内存泄漏分析
    image.png

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

  • Component Report:分析对象属于同一个包或者被同一个类加载器加载
    9E0FDF4936AB4FDAB4FB453712E557DE.png

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

五、第三方调优工具----GC Easy

这是一个web工具,在线使用非常方便.
地址: http://gceasy.io
进入官网,讲打包好的zip或者gz为后缀的压缩包上传,过一会就会拿到分析结果。
image.png

image.png