Java性能监控和故障诊断可视化工具之jvisualvm

本文介绍了JVM监控工具jvisualvm,它自JDK1.6引入,功能比jconsole更强大。文中详细说明了其启动方法、插件安装过程,包括解决默认连接关闭问题;还阐述了监控远程Java进程的配置与操作,以及堆转储快照生成、程序性能分析等使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前面的文章中我们介绍了jconsole,本篇文章我们来介绍下jvisualvm。jvisualvm(All-in-One Java Troubleshooting Tool)是jdk1.6开始引入的JVM监控工具,其基本上包含了jconsole的功能且比jconsole更加强大,主要功能如下图:
在这里插入图片描述
1、jvisualvm启动
系统运行中输入jvisualvm (需要先配置环境变量,一般开发人员搭建Java开发环境时都会配置)命令,点击“确定”打开jvisualvm页面,如下图所示:
在这里插入图片描述
首次打开jvisualvm时最好先安装jvisualvm插件,jvisualvm插件提供了许多扩展功能,不安装插件只能使用jvisualvm的基本的监控、线程面板等功能。
2、jvisualvm插件的安装
点击菜单栏中“工具”—>“插件”后弹出插件管理框,如下图所示:
在这里插入图片描述
在弹出框中点击“检查更新”,报如下图所示错误(小编使用的JDK版本是1.8.0_25,非此版本的JDK可能会展示不同的错误):
在这里插入图片描述
错误的原因是:默认的连接已经关闭,新地址已经迁移到github,网址https://visualvm.github.io/pluginscenters.html里面有不同版本jdk对应的插件中心地址,如下图所示:
在这里插入图片描述
选择对应JDK版本的插件中心地址,点击“设置”如下图所示:
在这里插入图片描述
点击右侧的“编辑”按钮,进行编辑:
在这里插入图片描述
修改为本机JDK版本对应的插件中心地址,点击按钮“确定”保存后会自动检测更新,如下图所示是检查后发现存在可用的插件:
在这里插入图片描述
选择需要的插件进行更新,如下图所示:
在这里插入图片描述
安装插件完成后,可以在“已安装”页签中查看已安装的插件,如下图所示:
在这里插入图片描述
3、jvisualvm的使用
jvisualvm可以监控本地Java进程,也可以监控远程Java进程。但一般测试环境或者生产环境的Java服务都是部署远端服务器上,所以我们重点讲如何通过jvisualvm监控远程Java进程。而jvisualvm要实现监控远程Java进程,需要远程服务器在启动Java进程时支持JMX连接。
要配置远程Java进程支持JMX连接,需要在启动Java进程时加入以下属性:
-Dcom.sun.management.jmxremote.port=7091
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
上述配置的意义是开启JMX连接端口7091,同时配置不需要ssl安全认证方式连接(一般我们的监控的服务器都是在本地局域网中,所以没有必要配置ssl安全认证方式连接,若要配置ssl安全认证方式连接,还需要配置连接的用户名及密码等)
假如远程Java进程已经配置了支持JMX连接,我们点击菜单“文件”—> 添加JMX连接,在弹出框中输入远程进程的IP和端口,如:172.30.14.242:7091(小编使用的服务器IP是172.30.14.242,配置的支持JMX的端口是7091),如下图所示:
在这里插入图片描述
输入完成后点击“确定”按钮,则新增了远程进程,如下图所示:
在这里插入图片描述
双击应用程序框中,已新增的远程节点下的远程进程,右侧窗口展示了远程概述信息,如下图所示:
在这里插入图片描述
在右侧窗口中包含页签概述、监视、线程、抽样器等,如果安装了其他插件,此处页面还会有所增加,如下图所示:
在这里插入图片描述
jvisualvm基本的概述、监视、线程功能与jconsole中的功能差别不大,此处不在赘述。(感兴趣的同学可以查看×××)。
4、生产并浏览堆转储快照
Dump文件生成的方式有两种:
a、在应用程序窗口中右键点击应用程序节点,在弹出框中选择“堆Dump”;
b、在右侧已打开的应用程序“监视”标签页中单击“堆Dump”
在这里插入图片描述
点击按钮“确定”生产Dump文件:
在这里插入图片描述
将远程服务器上的Dump文件下载到本地,点击菜单“文件”——》“载入”后选择下载的Dump文件载入,如下图所示:
在这里插入图片描述
可以查看应用程序Dump时的运行时参数,线程堆栈、类的实例数量、容量信息以及实例的具体属性信息。
5、分析程序性能
在抽样器页面中提供了程序运行期间方法级的COU执行时间分析及内存分析,由于抽样分析过程对程序运行性能有较大的影响,一般我们只在测试环境中使用此功能。
如下图所示,点击“CPU”抽样分析:
在这里插入图片描述
CPU分析是统计抽样期内每个方法的执行次数、执行耗时等,以分析出哪个方法CPU耗时较长,哪个方法频繁执行,为程序性能优化提供数据。
点击“内存”抽样分析:
在这里插入图片描述
内存分析是统计抽样期内每个方法关联的对象及所占的空间,以分析出哪个方法关联对象多,哪个方法占用空间较大,为程序性能优化提供数据。
以上介绍了可视化工具jvisualvm插件的安装及jvisualvm基本使用,希望对大家有所帮助。后续我们还会带来最强大可视化工具jmc的介绍,感兴趣的同学可以关注我们的微信公众号。

在这里插入图片描述

### JVisualVM 的使用指南与性能分析教程 JVisualVMJDK 自带的一款强大的 Java 性能分析工具,能够帮助开发者实时监控分析 Java 应用程序的运行状态。它支持内存分析、线程分析、CPU 抽样、堆转储(Heap Dump)生成与分析等功能,几乎涵盖了所有 JDK 自带命令的功能[^3]。 #### 实时监控 JVisualVM 提供了多个面板用于实时监控 Java 应用程序的运行状态: - **概览面板**:显示 JVM 参数系统属性。 - **监视面板**:显示 CPU 使用情况、堆/非堆内存使用曲线、已加载类数量、活动/守护线程数等关键指标。 - **线程面板**:查看所有线程的状态,支持生成线程转储(Thread Dump)。 - **抽样器面板**:进行 CPU 抽样分析(热点方法分析)内存抽样分析(对象分配情况)。 - **Visual GC 插件**:直观显示各内存区域的使用情况,以及 GC 次数耗时统计。 #### 性能分析 JVisualVM 支持多种性能分析方式: - **堆转储(Heap Dump)**:在“监视”标签页点击“堆Dump”按钮,生成堆转储文件后可查看对象直方图、支配树(Dominator Tree)以及使用 OQL 查询对象信息。 - **性能分析(Profiler)**:切换到“分析器”标签页,选择 CPU 或内存分析,点击“CPU”或“内存”按钮开始分析,分析结束后可查看热点方法或对象分配情况。 - **BTrace 动态追踪**:确保已安装 BTrace 插件,右键目标应用 → BTrace → 新建脚本,编写 BTrace 脚本进行动态追踪。 #### 实战技巧 ##### 内存泄漏分析流程 1. 生成多个时间点的堆转储。 2. 比较不同时间点的对象数量变化。 3. 查看支配树,找出保留大量内存的对象。 4. 分析引用链,找出泄漏根源。 ##### CPU 高负载分析流程 1. 使用“抽样器”进行 CPU 分析。 2. 查看热点方法列表。 3. 结合线程转储分析线程状态。 4. 使用 Profiler 进行更精确的方法级分析。 ##### 死锁检测 1. 在“线程”面板点击“线程转储”按钮。 2. 查看转储结果末尾的死锁检测部分。 3. 分析相关线程的堆栈信息。 #### 高级功能 - **远程监控**:输入远程主机 IP 端口(如:192.168.1.100:9010),连接远程 JVM 进行监控。 - **JMX 远程监控**:无需 SSL 的快速调试连接。 - **ZGC 调优**:适用于大内存低延迟场景。 - **飞行记录(JFR)**:内置性能采样数据,能够监测大量数据,如锁竞争、延迟、阻塞等。 ### 示例代码:使用 BTrace 进行动态追踪 ```java @BTrace public class TracingScript { @OnMethod(clazz="com.example.Service", method="process") public static void onMethod() { println("Service.process() called"); } } ``` 点击“运行”应用脚本,可以实时追踪 `Service.process()` 方法的调用情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值