原标题:Java-100天知识进阶-JVM调优工具-JDK自带工具-知识铺《八》

JVM 监控分析工具

一、JDK 自带工具

1. jconsole

JDK/bin 目录下, jconsole.exe 双击打开, 自动搜索本机运行的虚拟机进程。选择其中一个进程即可,开始进行JVM监控

java应用内存调优 java内存调优工具_JVM

java应用内存调优 java内存调优工具_tomcat_02

1.1 基本介绍

JConsole 基本包括以下基本功能:概述、内存、线程、类、VM概要、MBean。

1.2 内存监控

1.2.1 内存视图中可选,7中内存类型监控

java应用内存调优 java内存调优工具_tomcat_03

1.2.2 内存视图右下角有实时 堆与非堆的内存占用情况。

java应用内存调优 java内存调优工具_jvm调优 java_opt_04

1.2.3 主体部分,可以看到一段时间内存的使用走势。

java应用内存调优 java内存调优工具_tomcat_05

定位问题:

一般定位问题的时候,这个走势图很重要。如果有内存泄漏,走势图会持续增长。不是像上图所示,一直在5Mb徘徊,这种是正常现象,锯齿状,代表着程序的GC频繁。

1.3 线程监控

java应用内存调优 java内存调优工具_加载_06

定位问题:

这里可以很方便检测是否有死锁的线程。

java应用内存调优 java内存调优工具_java应用内存调优_07

1.3 类 加载的类走势图

java应用内存调优 java内存调优工具_tomcat_08

1.4 VM 概要

java应用内存调优 java内存调优工具_tomcat_09

1.5 MBean

java应用内存调优 java内存调优工具_jvm调优 java_opt_10

可以看到这里是内存中加载的Bean

1.6 远程监控

注意: 要使用 jconsole.exe 监控远程tomcat,必须在启动tomcat的时候,开启JMX接口。

-Dcom.sun.management.jmxremote.port=9999

-Dcom.sun.management.jmxremote.ssl=false

-Dcom.sun.management.jmxremote.authenticate=false

2. jmap 工具

2.1 查看堆使用情况

jmap -heap pid

java应用内存调优 java内存调优工具_jvm调优 java_opt_11

2.2 查看各内存区的使用情况

2.2.1 Eden 区内存使用率 72%

java应用内存调优 java内存调优工具_java应用内存调优_12

2.2.2 From 和 To 区内存容量一样大

young gc 很频繁

java应用内存调优 java内存调优工具_jvm调优 java_opt_13

3. VisualVM 工具

3.1 VisualVM 是一个工具,它提供了一个可视界面。

java应用内存调优 java内存调优工具_加载_14

3.2 和 jconsole 工具不同的是,这个工具可以根据需要安装插件。

java应用内存调优 java内存调优工具_tomcat_15

安装这些插件

java应用内存调优 java内存调优工具_jvm调优 java_opt_16

3.3 常用的下面的监视视图

java应用内存调优 java内存调优工具_JVM_17

CPU,堆,类,线程的使用情况走势图很清晰。

3.4 如果有异常情况,直接点击 堆 Dump

java应用内存调优 java内存调优工具_java应用内存调优_18

3.5 类很清晰

java应用内存调优 java内存调优工具_JVM_19

清晰看到类加载的情况。实例数,大小,这些都是定位问题必须看的。

3.6 堆对比功能(排查问题很重要)

java应用内存调优 java内存调优工具_加载_20

很清晰看到一段时间内,实例数猛增的是那些。

3.7 双击上图中类名

java应用内存调优 java内存调优工具_加载_21

这个视图,查看实例数,具体某个实例的值是什么。很清晰。

java应用内存调优 java内存调优工具_jvm调优 java_opt_22

可以看到实例中字段类型:数组,对象,基本类型,静态字段,垃圾回收根节点,