3. JVM监控及诊断工具-GUI篇
3.1 工具概述
使用上一章命令行工具或组合能帮您获取目标Java应用性能相关的基础信息,但它们存在下列局限:
1.无法获取方法级别的分析数据,如方法间的调用关系、各方法的调用次数和调用时间等(这对定位应用性能瓶颈至关重要)。
2.要求用户登录到目标 Java 应用所在的宿主机上,使用起来不是很方便。
3.分析数据通过终端输出,结果展示不够直观。
为此,JDK提供了一些内存泄漏的分析工具,如jconsole,jvisualvm等,用于辅助开发人员定位问题,但是这些工具很多时候并不足以满足快速定位的需求。所以这里我们介绍的工具相对多一些、丰富一些。
图形化综合诊断工具
- JDK自带的工具
- jconsole:JDK 自带的可视化监控工具。查看 Java 应用程序的运行概况、监控堆信息、永久区(或元空间)使用情况、类加载情况等
- 位置:
<JAVA_HOME>\bin\jconsole.exe
- 位置:
- Visual VM:Visual VM 是一个工具,它提供了一个可视界面,用于查看 Java 虚拟机上运行的基于 Java 技术的应用程序的详细信息。
- 官网:https://visualvm.github.io/ ,默认情况下,JDK 不再带这个工具,需要自行下载
- JMC:Java Mission Control,内置 Java Flight Recorder。能够以极低的性能开销收集Java虚拟机的性能数据。
- jconsole:JDK 自带的可视化监控工具。查看 Java 应用程序的运行概况、监控堆信息、永久区(或元空间)使用情况、类加载情况等
- 第三方工具
- MAT:MAT(Memory Analyzer Tool)是基于 Eclipse 的内存分析工具,是一个快速、功能丰富的 Java heap 分析工具,它可以帮助我们查找内存泄漏和减少内存消耗
- Eclipse 的插件形式安装
- JProfiler:商业软件,需要付费。功能强大。
- MAT:MAT(Memory Analyzer Tool)是基于 Eclipse 的内存分析工具,是一个快速、功能丰富的 Java heap 分析工具,它可以帮助我们查找内存泄漏和减少内存消耗
3.2 JConsole
jconsole
:从 Java 5 开始,在 JDK 中自带的 Java 监控和管理控制台。用于对 JVM 中内存、线程和类等的监控,是一个基于 JMX(java management extensions) 的 GUI 性能监控工具。
官方文档:https://docs.oracle.com/javase/7/docs/technotes/guides/management/jconsole.html
3.2.1 启动
两种启动方式:
- 直接单击
jconsole.exe
,仅适用于 Windows - 命令行窗口中输入
jconsole
命令
启动界面如下:
需要选择一个要监控的进程。
界面如下:
三种启动方式
- Local:使用 JConsole 连接一个正在本地系统运行的 JVM,并且执行程序的和运行 JConsole 的需要是同一个用户。JConsole 使用文件系统的授权通过 RMI 连接起链接到平台的 MBean 的服务器上。这种从本地连接的监控能力只有 Sun 的 JDK 具有。
- Remote:使用下面的 URL 通过 RMI 连接器连接到一个 JMX 代理,
service:jmx:rmi:///jndi/rmi://hostName:portNum/jmxrmi
。JConsole 为建立连接,需要在环境变量中设置mx.remote.credentials
来指定用户名和密码,从而进行授权。 - Advanced:使用一个特殊的 URL 连接 JMX 代理。一般情况使用自己定制的连接器而不是 RMI 提供的连接器来连接 JMX 代理,或者是一个使用 JDK1.4 的实现了 JMX 和 JMX Remote 的应用
3.3 Visual VM
- Visual VM是一个功能强大的多合一故障诊断和性能监控的可视化工具。
- 它集成了多个JDK命令行工具,使用Visual VM可用于显示虚拟机进程及进程的配置和环境信息(jps,jinfo),监视应用程序的CPU、GC、堆、方法区及线程的信息(jstat、jstack)等,甚至代替JConsole。
- 在JDK 6 Update 7以后,Visual VM便作为JDK的一部分发布(VisualVM 在JDK/bin目录下)即:它完全免费。
- 此外,Visual VM也可以作为独立的软件安装:官方地址:https://visualvm.github.io/index.html
3.3.1 插件的安装
IDEA 安装 VisualVM Launcher 插件
"File" "Settings" "Plugins" 打开插件安装界面。
在市场(Marketplace)中搜索 “VisualVM Launcher”
插件安装好之后,重启IDEA,然后再打开 "Settings" 配置界面,找到 "VisualVM Launcher",配置VisualVM的路径和JDK,如下:
3.3.2 连接方式
1. 在IDEA中通过插件启动
两种启动方式,一种是正常启动,一种是DEBUG启动。
也可启动应用后通过,左侧的 “Start VisualVM” 来启动。
启动后的界面如下:
2. 本地连接
进入到VisualVM安装目录,然后进入到 "bin" 文件夹,单击 "visualvm.exe" 启动 VisualVM。
界面如下
在左侧的“Local” 下双击要监控的进程。即可进入监控界面
3. 远程连接
3.3.3 主要功能
- 生成/读取堆内存快照
- 查看JVM参数和系统属性
- 查看运行中的虚拟机进程
- 生成/读取线程快照
- 程序资源的实时监控
- 其他功能
- JMX代理连接
- 远程环境监控
- CPU分析和内存分析