VisualVM

article/2025/10/13 20:10:48

VisualVM

VisualVM基本认识

官网http://visualvm.github.io/
**VisualVM 是一个工具,它提供了一个可视界面,用于查看 Java 虚拟机 (Java Virtual Machine, JVM) 上运行的基于 Java 技术的应用程序(Java 应用程序)的详细信息。**您可以查看本地应用程序以及远程主机上运行的应用程序的相关数据。此外,还可以捕获有关 JVM 软件实例的数据,并将该数据保存到本地系统,以供后期查看或与其他用户共享。

jvisualvm是随jdk一同发布的jvm诊断工具,通过插件可以扩展很多功能,插件扩展也是jvisualvm的精华所在。自从 JDK 6 Update 7 以后已经作为 Oracle JDK 的一部分,位于 JDK 根目录的 bin 文件夹下,无需安装,直接运行即可。

运行java程序的时候启动visualvm,方便查看jvm的情况 比如堆内存大小的分配
某个对象占用了多大的内存,jvm调优必备工具

visualvm工具使用教程
参考URL: https://blog.csdn.net/qq_23747821/article/details/79675193?utm_source=blogxgwz0
性能分析神器VisualVM
参考URL: http://www.cnblogs.com/wade-xu/p/4369094.html
VisualVM使用方法
https://blog.csdn.net/lijie1010/article/details/78805837

visualvm功能

◆监控应用程序的性能和内存占用情况
◆监控应用程序的线程
◆分析(Profile)应用程序性能和内存分配情况
◆进行线程转储(Thread Dump)或堆转储(Heap Dump)
◆分析核心转储(Core Dump)
◆保存快照以便脱机分析应用程序。

本地的JVM进程Visual VM会自动检测出来。默认的监控信息并不多,基本功能有点像JConsle,并没有包含更细的内容。此时需要安装插件(Visual VM自带了安装插件的功能),这是Visual VM 的一个优势。

VisualVM和JConsole

JConsole(以下写作jconsole),VisualVM(以下写作jvisualvm )
都是比较好的JVM调优工具,且都为JDK自带,可在命令行直接启动。

Visual VM比较强大的JVM图形化监控工具,比jconsole强大完善。

VisualVM远程连接配置

用VisualVM进行远程连接的配置和JConsole是一样的。

  1. 设置JVM启动参数
    //JMX监听的IP地址
    -Djava.rmi.server.hostname=192.168.x.x
    //JMX端口
    -Dcom.sun.management.jmxremote.port=2990
    //关闭SSL连接
    -Dcom.sun.management.jmxremote.ssl=false
    //关闭帐号密码验证
    -Dcom.sun.management.jmxremote.authenticate=false

idea集成

  1. 安装VisualVM插件 VisualVM
    2.安装后,重启Idea
    3.安装完成后,在原来的Run和Debug按纽旁会多出两个按纽,点击后会出现选择VisualVM路径,选择本地JDK安装目录下的bin目录中的jvisualvm即可。
    在这里插入图片描述
    6.这时点击启动,会多打开一个VisualVM的窗口。(也可以正常点击Run按纽运行程序,在控制台有个橘黄色的按纽也可打开VisualVM)

VisualVM使用

  1. 打开VisualVM,在Tools->Plugins中安装Visual GC插件,然后再启动IDEA,可以从VisualVM左侧的列表中看到对应的程序,双击可以看到右侧的数据

界面如下:
在这里插入图片描述
右侧有Overview、Monitor、Threads、Sampler和Visual GC几个标签,其中Overview中可以看到程序的基本信息和启动参数、环境变量等等;Monitor是几个折线图,用于显示CPU、内存(分为Heap和Metaspace)、Classes和Threads的使用情况或者数量;Visual GC是用图形化的方式显示了Heap的每个空间,如Eden、S0、S1、Old和Metaspace的使用情况,以及它们的空间使用量的变化折线图,和GC的次数、时间等等。在这里我们主要关注Monitor和Visual GC标签。

概述界面

在这里插入图片描述
Ø PID – 程序启动后的进程号,在命令行中可以用 jps命令查看

Ø 主机 – 如果是本机的话显示,localhost,如果是远程主机应该是显示远程主机的主机名或者IP

Ø 主类 – 程序入口类(main方法所在的类)

Ø 参数 – VisualVm 启动的时候使用的一些配置文件路径

Ø JVM – jvm类型

Ø Java – jdk的版本信息

Ø Java Home – JDK安装目录

l JVM参数 – VisualVm 启动时候设置的JVM参数

监控界面 系统资源占用情况

在这里插入图片描述
Ø CPU – 展示java程序运行的时候占用的cpu资源 如下图中橙色的表示程序运行使用的cpu资源百分比,蓝色部分表示垃圾回收占用CPU资源百分比

Ø 堆 – 这里要说明下堆内存的组成部分,堆是由老年代和新生代组成,其中新生代有由"伊甸园"和"两个幸存区组成"三部分组成,堆视图看到的资源占用实际是"老年代"、“伊甸园(Eden)”、"两个幸存者(Survivor )"的一个综合情况。

Ø PermGen – Perm 区用来存放java类以及其他虚拟机自己的静态数据,(常被称为持久代或者方法区

Ø 类 – 此视图 主要展示 当前程序加载了多少个类

Ø 线程 – 当前程序的线程启动情况

§ 执行垃圾回收 – 手动触发一次GC 相当于在程序代码中调用(System.gc()),如果是远程连接到生产环境中请慎重点击。

§ 堆Dump – 生产当前程序的内存快照hprof文件,对于分析内存溢出问题比较有帮助。(可以查看当前程序内存中的所有对象)

线程页面 程序中所有的线程运行状态

在这里插入图片描述
Ø 线程dump – 此按钮主要生产当前程序中所有线程的快照(对分析线程死锁,比较有帮助)

Ø 时间线 – 展示每个线程的实时运行状态(不同颜色代表不同的状态)

Ø 表 – 按照二维表格的形式展示每个线程不同状态的时间统计信息

Ø 详细信息 – 用饼图展示每个线程的运行状态

抽取样

在这里插入图片描述
CPU-> CPU样例 – 主要展示方法消耗的CPU资源比例和时间
CPU->线程CPU时间 – 主要展示线程消耗的CPU资源信息
内存-> 堆柱状图 – 展示堆内存中各种对象占用的字节数和总实例数
内存-> 每个线程分配—展示不同线程占用内存的情况

VisualGC插件界面

在这里插入图片描述

jdk8 Metaspace 调优
参考URL: https://blog.csdn.net/bolg_hero/article/details/78189621
从JDK8开始,永久代(PermGen)的概念被废弃掉了,取而代之的是一个称为Metaspace的存储空间。
Java 8: 从永久代(PermGen)到元空间(Metaspace)
参考URL: https://blog.csdn.net/zhyhang/article/details/17246223?utm_source=blogxgwz0

JVM Metaspace进行了动态扩展,Metaspace使用的是本地内存,而不是堆内存,也就是说在默认情况下Metaspace的大小只与本地内存大小有关,以满足程序中不断增长的类数据内存占用需求。

堆 = Old+Eden+S0+S1
栈 = PerM区(在java8中改成了metaspace)


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

相关文章

JAVA性能分析工具--Jvisualvm使用方法

JDK自带的JAVA性能分析工具。它已经在你的JDK bin目录里了,只要你使用的是JDK1.6 Update7之后的版本。点击一下jvisualvm.exe图标它就可以运行了。 这里是VisualVM 的官方网站:https://visualvm.dev.java.net,资料很全,同时提供V…

jvisualvm使用

一、jvisualvm安装 1、Java版本在1.8及1.8版本以下,JDK已经自带这个工具 2、Java版本在1.8的,需要安装visualvm https://visualvm.github.io/download.html 对于自行安装的版本,运行前需要配置一下路径 进入visualvm的etc的目录,修改visualvm.conf文件…

生成特定架构内核cscope数据库

tags代码浏览工具 tags工具介绍 一般来说,如果我们想要研究一个c/c项目的源码,我们首先要做的是为该项目生成tags文件,tags文件种类有很多,比如 ctags、etags、cscope、gtags 等,有关他们的区别可以参考下面链接里的…

Emacs+cscope手动创建索引(感受cscope的强大)(八十三)

1.cscope 创建索引 <1>.创建索引文件列表cscope.files # find . ! -path "./out/*" ! -path "./prebuilts/*" ! -path "./frameworks/*" -name "*.h" -o -name "*.c" -o -name "*.cc" -o -name "*.cp…

vim cscope java_【转】Cscope的使用(领略Vim + Cscope的强大魅力)

【转】Cscope的使用(领略Vim Cscope的强大魅力) 1、Cscope介绍 Cscope是类似于ctags一样的工具&#xff0c;但可以认为她是ctags的增强版&#xff0c;因为她比ctags能够做更多的事。在Vim中&#xff0c;通过cscope的查 询&#xff0c;跳转到指定的地方就像跳转到任何标签&…

Vim/Cscope使用

&#xff1a;cs find s ---- 查找C语言符号&#xff0c;即查找函数名、宏、枚举值等出现的地方 &#xff1a;cs find g ---- 查找函数、宏、枚举等定义的位置&#xff0c;类似ctags所提供的功能 &#xff1a;cs find d ---- 查找本函数调用的函数 &#xff1a;cs find c ---- 查…

Cscope的使用

首先在目录下建立cscope索引文件 find -name *.c > cscope.file cscope -Rbkq 这个命令会生成三个文件&#xff1a;cscope.out, cscope.in.out, cscope.po.out。 其中cscope.out是基本的符号索引&#xff0c;后两个文件是使用"-q"选项生成的&#xff0c;可以加快c…

Cscope的使用(领略Vim + Cscope的强大魅力)

http://blog.csdn.net/dengxiayehu/article/details/6330200 1、Cscope介绍 Cscope是类似于ctags一样的工具&#xff0c;但可以认为她是ctags的增强版&#xff0c;因为她比ctags能够做更多的事。在Vim中&#xff0c;通过cscope的查询&#xff0c;跳转到指定的地方就像跳转到任…

计算机联网记录能删除吗,电脑怎么删除路由器wifi记录

这个网络时代里面我们最常用来连接网络的设备就是路由器了&#xff0c;特别是在我们的生活中很难缺少wifi网络&#xff0c;当然我们有时候也可能会想要删除wifi网络&#xff0c;那么你知道电脑怎么删除路由器wifi记录吗?下面是学习啦小编整理的一些关于电脑删除路由器wifi记录…

mysql查询删除的数据历史记录_查询数据库各种历史记录

在SQL Server数据库中,从登陆开始,然后做了什么操作,以及数据库里发生了什么,大多都是有记录可循的,但是也有一些确实无从查起。 一.数据库启动记录 1.最近一次启动SQL Server的时间 select sqlserver_start_time from sys.dm_os_sys_info; --也可参考系统进程创建的时间,…

怎样删除计算机硬盘记录,有什么方法能删除电脑里使用过的移动硬盘的记录

第一步&#xff1a;通过硬件检测软件(EVEREST Ultimate)得到你的移动存储器的硬件编号&#xff0c;例如我的魅族E5为&#xff1a;Ven_SigmaTel&Prod_MSCN&Rev_0100\0002F68C022B070F&0。0002F68C022B070F&0为硬件编号&#xff0c;具有唯一性。 3 T* }5 {/ T3 ]…

sqlserver恢复已经删除的表记录

在发生删除操作后&#xff0c;发现要找回删除的记录&#xff0c;此时灾难发生&#xff0c;为了挽回记录&#xff0c;操作步骤如下&#xff1a; 首先保证数据恢复模式是完整的&#xff0c;然后才能做下面的操作&#xff1a; 强烈建议数据库创建之后做个完整的备份&#xff0c;…

数据库的主键ID设置为自动增加,删除记录后的记录还是递增的,如何重新从1开始增加呢?

操作 数据库数据 删除了7和8之后添加了一条新数据 问题 删除记录后的记录还是递增的&#xff0c;如何重新从1开始增加呢&#xff1f; 解决 truncate table 表名;注意 此语句会把表中数据清空

如何查看AD域账号的删除记录

**如何查看AD域账号删除记录及恢复**在日常AD域管理中&#xff0c;有时候我们不小心删除了域账号&#xff0c;或者我们想查看这个域账号是什么时候创建并删除的&#xff0c;那怎么办&#xff1f;是否可以恢复&#xff1f;其实微软本身已经为我们的账号信息做了备份机制&#xf…

计算机上网记录怎么清除,电脑浏览器上网记录怎么删除

我们使用浏览器上网时都会生成大量的缓存临时文件与访问过的url地址&#xff0c;有时为了我并不想让其它人看到我这些信息要怎么清除呢&#xff0c;下面我们一起来看看吧。 1.在这里我们只要打开浏览器&#xff0c;然后点击菜单上的“查看”->“历史记录”如下图所示(搜狗浏…

es 7.4.0 详解删除记录的方法

_delete_by_query 命令是删除记录 post 请求&#xff1a;http://localhost:9200/index/_delete_by_query 注&#xff1a; 删除也是先走和查询一样的语法&#xff0c;只是最后的命令是 删除的命令 {"query":{"term":{"bookId":1}} }这是清空 {&…

【日常实用】Git如何删除记录中某一笔提交

前言&#xff1a;好久没写了&#xff0c;最近忙于工作的项目&#xff0c;一连干了好几个月&#xff0c;几个月里面又遇到了高温、限电以及疫情种种困难&#xff0c;最终还是如期完成项目进度。今年真的是太难了&#xff0c;哈哈废话不多说&#xff0c;今天给大家介绍一下Git中的…

MySQL删除表中所有记录的方法和操作例子

从数据库中删除数据&#xff0c;使用DELETE语句。其语法如下 DELETE FROM table_name [WHERE <condition>]; 语句解析&#xff1a;table_name为表名称&#xff0c;[WHERE <condition>]为删除条件 例如如下例子&#xff1a;删除的是表admin_user_table&#xff…

DDMS开不起来怎么办

接上一篇博客&#xff0c;解决了虚拟机打不开的问题&#xff0c;出现了DDMS打不开的问题。原因是我把文件进行替换了&#xff0c;少了monitor.bat&#xff0c;导致DDMS打不开。 解决方法&#xff1a; 1.去http://www.android-studio.org/index.php/download/hisversion中下载新…

DDMS 无法显示进程解决方案

最近使用真机替换模拟器&#xff0c;发现ddms无法显示进程名称&#xff0c;LogCat的application显示&#xff1f;。如图所示&#xff1a; 后面经过师兄指导&#xff0c;按照以下步骤解决了&#xff1a; 第一步&#xff1a;拷贝mprop 到/data/目录下&#xff1b; 第二步&#x…