Java VisualVM使用

article/2025/10/13 18:04:20

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

如何安装插件:
1、从主菜单中选择“工具”>“插件”。
2、在“可用插件”标签中,选中该插件的“安装”复选框。单击“安装”。
3、逐步完成插件安装程序。

如果可选插件没有,那么需要更换插件更新地址: 在如下网址中找到自己jdk版本的插件地址:
https://visualvm.github.io/pluginscenters.html
我的的jdk是jdk1.8.0_20则选择如下框中的版本地址,复制;在VisualVM->工具->插件->设置->编辑中替换URL
(此处url历史值能看出安装插件要选什么版本)
在这里插入图片描述
点击设置->编辑,粘贴新的url确定,即可看到可用插件会出现,然后选择需要的进行安装;

监控远程

右键远程->添加主机:输入ip地址,右键再选择添加JMX连接, 填入JMX端口(不知道端口号先随便填,看后面讲解)确定,出现如下错误: 由于JMX没配置或地址不对
在这里插入图片描述
(1)首先要修改远程服务器JDK中JMX服务的配置文件,以获得相应的权限:

    进入$JAVA_HOME所在的根目录的/jre/lib/management子目录下,a. 将jmxremote.password.template文件复制为jmxremote.password : cp  -r  jmxremote.password.template  jmxremote.passwordb. 调整jmxremote.access和jmxremote.password的权限为只读写,可以使用如下命令:chmod  600  jmxremote.access jmxremote.passwordc. 打开jmxremote.password文件,去掉这两行前面的注释符号# monitorRole QED# controlRole R&D

若要配置账号密码:
打开jmxremote.password,修改,添加用户或密码,建议不要使用默认的用户名和密码登录:

monitorRole   222
jmxuser       111111
newuser       222222

打开jmxremote.access,修改新加/修改的用户权限:

monitorRole   readonly
jmxuser          readwrite \create javax.management.monitor.*,javax.management.timer.* \unregister
newuser         readwrite \create javax.management.monitor.*,javax.management.timer.* \unregister

JVM的启动配置中添加信息: 此处是tomcat启动,在tomcat启动文件bin/catalina.sh ,添加如下配置(防火墙自行开放端口):

JAVA_OPTS="-Dcom.sun.management.jmxremote.port=18088-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=172.19.16.2"

这几个配置的说明如下:
-Dcom.sun.management.jmxremote.port:这个是配置远程connection的jmx端口号的(默认是1099),
要确定这个端口没有被占用
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false:这两个是固定配置,是JMX的远程服务权限的
-Djava.rmi.server.hostname:这个是配置server的IP的,要使用server的IP最好在机器上先用hostname -i看一下IP
是不是机器本身的IP,如果是127.0.0.1的话要改一下,否则远程的时候连不上。

完了之后,再重复之前添加JMX连接, 应该就ok了;

Visual GC

远程监控时 点击Visual GC 会提示不受此JVM支持 , 需要使用Jstatd服务来解决
在jdk安装目录下 ,创建一个新的权限文件jstatd.all.policy:

cd /usr/local/src/jdk1.8.0_131/bin/
vim jstatd.all.policy

输入下文 (此处${java.home}是jre路径,而不是jdk环境变量的$JAVA_HOME) :

grant codebase "file:${java.home}/../lib/tools.jar" {permission java.security.AllPermission;
};

然后在 $JAVA_HOME/bin 下执行启动jstatd命令 :

./jstatd -J-Djava.security.policy=jstatd.all.policy 
-J-Djava.rmi.server.hostname=172.19.16.2 
-p 28088 
-J-Djava.rmi.server.logCalls=true  &

参数说明:

-J-Djava.security.policy=jstatd.all.policy =号后面的是文件的绝对路径;
-J-Djava.rmi.server.logCalls=true 打开日志,如果客户端有连接过来的请求,可以监控到,便于排错;
-J-Djava.rmi.server.hostname=172.19.16.2 指明本机 hostname 对应的本机地址,
确保该地址可以给客户机访问。因为有的服务器 hostname 对应的 ip 不一定是外网能连上的,最好在这里直接明确指定;
-p 28088 指定服务的端口号,默认是1099,是可选参数。由于以上JMX占用了端口,此处换一个(注意开放端口)。

完了在visualvm添加jstatd连接,断后改成上面配置的 28088 ,然后确定,
visualvm会出现运行JVM的容器如tomcat,点击Visual GC即可:
在这里插入图片描述如图:
在这里插入图片描述上图堆内存良好,下图就内存占满,需要分析了
在这里插入图片描述

抽样器或Profiler(分析器)

通过抽样器 分析具体哪个对象占用过多使内存占满,可以通过堆dump,分析堆转储分析数量多的对象
或两次堆dump文件对象的增长量,推断泄漏的位置
在这里插入图片描述
分析单独一个堆Dump中对象数量很多的情况;
在这里插入图片描述点击某个占用很多空间的类,右键在实例视图中显示.;
此处写个内存溢出的类MapTest,Memory,StactQueue用来测试;MapTest中main方法调用Memory的静态方法mm(),mm中循环将StactQueue对象存入一个map,最大Integer.MAX_VALUE次,注意main方法中让线程等待一段时间,以方便打开VisualVM分析

在这里插入图片描述
可以大概定位是某个map出现问题;那如何定位是哪个类呢?
如下排名靠前的需要分析的可能性更高 (文件越大,此查找过程CPU计算越卡顿)
在这里插入图片描述
生成两次时间间隔的 堆Dump 文件,比如16:03:08一次,16:03:24一次(不要太长,文件太大不便计算分析),
两者之间比较对象增量,剧增可能就有问题
在这里插入图片描述
两个堆转储比较:
在这里插入图片描述

线程


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

相关文章

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 应用程序做性能分析和调优。这些功能包括生成和分析海量数据、跟踪内存泄漏、监控垃圾…

JVisualVM初步使用

JVisualVM初步使用 1、前言 jvm调优工具有常见的为Jconsole,jProfile,VisualVM, Jconsole: 为jdk自带,功能简单,但是可以在系统有一定负荷的情况下使用。对垃圾回收算法有很详细的跟踪。JProfiler:商业软…

JVisualVM 简介

VisualVM 是Netbeans的profile子项目,已在JDK6.0 update 7 中自带,能够监控线程,内存情况,查看方法的CPU时间和内存中的对 象,已被GC的对象,反向查看分配的堆栈(如100个String对象分别由哪几个对象分配出来…

VisualVM

VisualVM VisualVM基本认识 官网http://visualvm.github.io/ **VisualVM 是一个工具,它提供了一个可视界面,用于查看 Java 虚拟机 (Java Virtual Machine, JVM) 上运行的基于 Java 技术的应用程序(Java 应用程序)的详细信息。**…

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 ---- 查…