JVisualVM 的使用教程

article/2025/10/13 16:50:00

欢迎大家关注我的公众号【老周聊架构】,Java后端主流技术栈的原理、源码分析、架构以及各种互联网高并发、高性能、高可用的解决方案。

一、简介

Java VisualVM 是一个直观的图形用户界面,基于Java 的应用程序,在给定的 Java 虚拟机(JVM)上运行时提供有关它们的详细信息。Java VisualVM 之所以这样命名,是因为Java VisualVM 可视地提供了有关JVM软件的信息。

Java VisualVM 将多个监视、故障排除和性能分析实用程序组合到一个工具中。 例如,独立工具 jmap,jinfo,jstat 和 jstack 提供的大多数功能已集成到 Java VisualVM 中。 可以将其他功能(例如 JConsole 工具提供的某些功能)添加为可选插件。

JVisualVM 使用简单,几乎0配置,功能还是比较丰富的,几乎囊括了其它JDK自带命令的所有功能。

  • 内存信息
  • 线程信息
  • Dump堆(本地进程)
  • Dump线程(本地进程)
  • 打开堆Dump。堆Dump可以用jmap来生成。
  • 打开线程Dump
  • 生成应用快照(包含内存信息、线程信息等等)
  • 性能分析。 CPU分析(各个方法调用时间,检查哪些方法耗时多),内存分析(各类对象占用的内存,检查哪些类占用内存多)

二、使用

1、找到 jvisualvm, 在jdk安装目录找到 jvisualvm.exe,${JDK_HOME}\bin\jvisualvm.exe

在这里插入图片描述

2、打开该工具,通过菜单“工具”—>“插件”开发以下对话框

在这里插入图片描述
3、找到对应的 Java VisualVM 插件中心的网址,我这里是 JDK8u91,所以在我箭头的这个范围
在这里插入图片描述
故插件中心的网址是: https://visualvm.github.io/archive/uc/8u40/updates.xml.gz

在这里插入图片描述

把地址填进去就可以下载插件了
在这里插入图片描述
这里用两个常用的插件就行,其他的插件看你自己按需下载。
在这里插入图片描述

4、我用的 IDEA 启动了一个程序
5、JVisualVM 的详细信息会出现在详细面板上

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
6、可以看具体的线程快照信息

在这里插入图片描述
在这里插入图片描述
右键,保存线程快照信息。

收集线程快照信息主要是为了监控是否有出现死锁的情况:

刚好我这里有个例子:

package com.concurrent.deadLock;/*** @author riemann* @date 2019/08/14 22:44*/
public class ThreadTest {public static void main(String[] args) {new Thread(new Thread1()).start();new Thread(new Thread2()).start();// new Thread(new Thread3()).start();}}class ThreadResource {public static Object resource1 = new Object();public static Object resource2 = new Object();
}class Thread1 implements Runnable {@Overridepublic void run() {try {System.out.println("Thread1 is running");synchronized (ThreadResource.resource1) {System.out.println("Thread1 lock resource1");Thread.sleep(2000);//休眠2s等待线程2锁定资源2synchronized (ThreadResource.resource2) {System.out.println("Thread1 lock resource2");}System.out.println("Thread1 release resource2");}System.out.println("Thread1 release resource1");} catch (Exception e) {System.out.println(e.getMessage());}System.out.println("Thread1 is stop");}
}class Thread2 implements Runnable {@Overridepublic void run() {try {System.out.println("Thread2 is running");synchronized (ThreadResource.resource2) {System.out.println("Thread2 lock resource2");Thread.sleep(2000);//休眠2s等待线程1锁定资源1synchronized (ThreadResource.resource1) {System.out.println("Thread2 lock resource1");}System.out.println("Thread2 release resource1");}System.out.println("Thread2 release resource2");} catch (Exception e) {System.out.println(e.getMessage());}System.out.println("Thread2 is stop");}
}class Thread3 implements Runnable {@Overridepublic void run() {try {System.out.println("Thread is running");if (ThreadResource.resource1.hashCode() > ThreadResource.resource2.hashCode()) {//先锁定resource1synchronized (ThreadResource.resource1) {System.out.println("Thread lock resource1");Thread.sleep(2000);synchronized (ThreadResource.resource2){System.out.println("Thread lock resource2");}System.out.println("Thread release resource2");}System.out.println("Thread release resource1");} else {//先锁定resource2synchronized (ThreadResource.resource2){System.out.println("Thread lock resource2");Thread.sleep(2000);synchronized (ThreadResource.resource1){System.out.println("Thread lock resource1");}System.out.println("Thread release resource1");}System.out.println("Thread release resource2");}} catch (Exception e) {System.out.println(e.getMessage());}System.out.println("Thread1 is stop");}
}

输出结果:

Thread1 is running
Thread1 lock resource1
Thread2 is running
Thread2 lock resource2

观察收集到快照信息,拉到最后看看,如图,就是有出现死锁

在这里插入图片描述

两个线程都在互相等待对方释放锁,造成死锁。

7、拿堆栈快照信息

拿堆栈快照信息,如图,选择监控->堆Dump

在这里插入图片描述
在这里插入图片描述
同样右键->保存,保存堆栈快照信息。


http://chatgpt.dhexx.cn/article/fn9F4HRL.shtml

相关文章

使用jvisualvm、jmc远程监控JVM

演示环境:jdk1.8 jvisualvm和jmc都是JDK自带的监控工具。jmc监控数据比jvisualvm更加丰富。它们都在JDK bin目录中 首先介绍jvisualvm的使用 打开bin/jvisualvm.exe 本地的JVM进程都已经识别出来了,直接点击即可监控。 为了使jvisualvm功能更加强大&a…

jvisualvm安装Visual GC插件

给jdk自带的jvisualvm安装Visual GC插件,遇到Were sorry the java.net site has closed(我们很抱歉java.net网站已经关闭) 1、找到新的更新地址 visualvm新访问地址:https://visualvm.github.io/index.html 进入“Plugins”&am…

用jvisualvm分析dump文件

最近有一个java服务的堆内存溢出,然后僵死了,在重启服务之前用jmap命令生成了一份dump文件便于后面分析。 生成dump文件的命令: jmap -dump:formatb,file20170307.dump 16048 file后面的是自定义的文件名,最后的数字是进程的pi…

JvisualVM使用教程

最近正在学习JvisualVm的使用,写一篇博客记录一下。 一 工具准备 1 软件 已经安装JDK及IDEA。 2 插件 2.1 Idea插件 在idea中按住快捷键 shift command A,输入plugins,搜索visualvm,如下图所示,安装插件。 安装…

Jvisualvm设置中文

从官网上下载的Jvisualvm.exe,一般启动后都为英文版。 如果本地电脑中有安装JDK,只要你使用的是JDK1.6 Update7之后的版本,那么它久已经在你的JDK bin目录里了。(该版本为中文版) 直接启动JDK中bin目录下的jvisualvm.exe即可。

Java VisualVM

文章目录 1.Java VisualVM简介(Introduction to Java VisualVM)1.1 Java VisualVM简介(Introduction to Java VisualVM)1.2 启动Java VisualVM(Starting Java VisualVM)1.2.1 Java VisualVM用户目录&#x…

jvisualvm远程连接的三种方式

文章目录 基于jatatd实现远程连接配置安全策略启动jstatd远程连接 基于JMX实现远程访问远程连接 基于SSH的远程连接启动远程应用ssh端口转发 基于jatatd实现远程连接 jstatd是一个基于RMI (Remove Method Invocation)的服务程序,它用于监控基于HotSpot的JVM中资源的…

Jvisualvm监控本地、远程Java进程

Jvisualvm监控本地、远程Java进程 监控本地Java进程监控远端Java进程JMX创建配置文件开启远程监控启动Tomcat创建连接 监控本地Java进程 在命令行输入jvisualvm即可启动jvisualvm 双击某个进程即可打开 监控远端Java进程 Jvisualvm不仅是可以监控本地jvm进程,还可以…

Java VisualVM使用

工具所在位置:windows下jdk安装路径内,如 C:\Program Files\Java\jdk1.8.0_20\bin\ jvisualvm.exe 双击执行; 效果图如下: 可以看到我本机有一个tomcat运行的监控 VisualVM可以根据需要安装不同的插件,每个插件的关注点都不同,有的主要监控GC&#xff0c…

jvisualvm (Java VisualVM)

文章来源:https://blog.csdn.net/a19881029/article/details/8432368 jvisualvm能干什么 监控内存泄露,跟踪垃圾回收,执行时内存、cpu分析,线程分析… jvisualvmg已经被集成在jdk1.6以上的版本中(不是jre)。自身运行需要最低jdk1.6版本&…

jvisualvm监控远程jvm

方式一:JMX 1、服务端添加配置 在tomcat/bin/catalina.sh文件中添加如下配置: export JAVA_OPTS"-Xms256m -Xmx512m -Xss256m -XX:PermSize512m -XX:MaxPermSize1024m -Dcom.sun.management.jmxremote -Djava.rmi.server.hostname192.168.16.239 …

jvisualvm插件安装

jvisualvm插件安装 jvisualvm是我们查看JVM内部结构和JVM调优的重要工具,在java的安装目录的bin目录下。我们安装的Java默认jvisualvm有很多插件是没有安装的。接下来我们来看一下jvisualvm的插件安装。 找到JDK版本对应的插件地址: 访问网址&#xff1a…

JVM调优之JConsole和JVisualVM工具使用

JVM调优过程中,常用JDK自带的两个工具JConsole和JVisualVM,有助于分析问题。下面是两个工具的使用方式。(我发现好多小伙伴居然都不知道这么强大的工具) 一、JConsole使用。 1、JConsole本地监控启动 首先在JDK的bin目录下&#…

JVisualVM安装Visual GC

1、手动下载 下载地址 VisualVM: Plugins Centers 我现在常用JDK8,我的版本号是91 所以打开网址,选择如下👇 选择对应的版本号之后,点击下面那个链接,之后会跳转到一个网页,找到Visual GC,点…

使用jvisualvm远程监控服务器上的jvm

转载文章:原文地址 在测试环境复现出了的研发自测没有发现的疑难问题如性能问题,排除服务器本身的问题之后,研发就需要定位问题。 我们可以直接远程监控测试环境的jvm查看监控进程的运行情况么? 我们可以直接远程dump测试环境的运…

Java jvisualvm简要说明

jvisualvm能干什么:监控内存泄露,跟踪垃圾回收,执行时内存、cpu分析,线程分析... jvisualvm已经被集成在jdk1.6以上的版本中(不是jre)。自身运行需要最低jdk1.6版本,但是可以监控运行在jdk1.4以上版本的java程序 以jd…

Java问题诊断工具——JVisualVM

这篇文章源自一次加班改bug的惨痛经历[,,_,,]:3 负责的一个项目占用不断增加,差点搞崩服务器(╥﹏╥)…… 一下子有点懵,不能立刻确定是哪里导致的问题,所以决定好好研究下这个之前一直被我忽视的问题诊断工具🔧——JVisualVM 嘿嘿…

JVisualVM的使用教程

一、前言 JVisualVM是一个Java虚拟机的监控工具,要是需要对JVM的性能进行监控可以使用这个工具哦 使用这个工具,你就可以监控到java虚拟机的gc过程了 那么,这么强大的工具怎么下载呢? 在JDK1.6后的版本是自带这个工具&#xf…

JVisualVM的使用实录

一、前言 JVisualVM是一个Java虚拟机的监控工具,要是需要对JVM的性能进行监控可以使用这个工具哦 使用这个工具,你就可以监控到java虚拟机的gc过程了 那么,这么强大的工具怎么下载呢? 在JDK1.6后的版本是自带这个工具&#xf…

jvisualvm的使用

jvisualvm的使用 VisuaIVM(All-in-One Java Troubleshooting Tool)是一款免费的,集成了多个 JDK 命令行工具的可视化工具,它提供强大的分析能力,对 Java 应用程序做性能分析和调优。这些功能包括生成和分析海量数据、跟踪内存泄漏、监控垃圾…