Java jvisualvm简要说明

article/2025/10/13 19:48:02

jvisualvm能干什么:监控内存泄露,跟踪垃圾回收,执行时内存、cpu分析,线程分析...

 

jvisualvm已经被集成在jdk1.6以上的版本中(不是jre)。自身运行需要最低jdk1.6版本,但是可以监控运行在jdk1.4以上版本的java程序

以jdk1.6update45(jdk1.6update45自带的jvisualvm)来做说明,当然也可单独下载独立的jvisualvm,正常安装完jdk后,至jdk的bin目录下,运行jvisualvm.exe即可

网上有人说jvisualvm对ntfs的硬盘格式支持的不好(都说不好,也没说到底哪里不好),反正我用着是挺正常的,不管怎么样先把解决方式记下来吧

创建jvisualvm.exe的快捷方式,右键快捷方式选择属性,在“目标”栏中追加"-XX:+PerfBypassFileSystemCheck"

程序运行后会自动监控本机运行的java程序(Local标签下,远程服务器上的java程序需要另行配置),如果是下载的jvisualvm,解压后,运行bin目录下的jvisualvm.exe即可

 

Local标签下的第一个VisualVM为jvisualvm对自身的监控,可以看到消耗的资源还是很少的,第二个为本机的eclipse

监控项总共分为Overview,Monitor,Threads和一个Sampler。

1.Overview(jvm启动参数,系统参数)

可以看到eclipse的启动参数

(通过这些启动参数,可以判断程序是否有内存溢出)

 

2.Monitor

左上:cpu利用率,gc状态的监控

右上:堆利用率,永久内存区的利用率

左下:类的监控

右下:线程的监控

performGC:gc的详细运行状态

HeapDump:堆的详细状态(可以看到堆的概况,里面所有的类,还能点进具体的一个类查看这个类的状态)

 

3.Threads

能够显示线程的名称和运行的状态,在调试多线程时必不可少,而且可以点进一个线程查看这个线程的详细运行情况

 

监控服务器上的tomcat

tomcat的配置文件catalina.sh中增加:

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

参数说明:

指定了JMX启动的代理端口,这个端口就是visualvm要连接的端口(9998端口不能被别的程序使用netstat -an|gerp 9998)
Dcom.sun.management.jmxremote.port=9998
指定了JMX是否启用ssl
Dcom.sun.management.jmxremote.authenticate=false
指定了JMX是否启用鉴权(需要用户名,密码鉴权)
Dcom.sun.management.jmxremote.authenticate=false
指定了服务器主机名
Djava.rmi.server.hostname=192.168.58.164

填写主机名:

右键创建一个jmx连接:

填写上端口号即可:

配置完成:

 

监控服务器上的java程序

相较于监控tomcat要麻烦很多,要预先启动jstatd服务(${java_home}/bin目录下)

jstatd是一个监控JVM从创建到销毁过程中资源占用情况并提供远程监控接口的RMI(Remote Method Invocation,远程方法调用)服务器程序,它是一个Daemon程序(后台进程),要保证远程监控软件连接到本地的话需要jstatd始终保持运行。

jstatd运行需要通过-J-Djava.security.policy=***指定安全策略,因此我们需要在服务器上建立一个指定安全策略的文件jstatd.all.policy(我放在了${java_home}/bin目录下),文件内容如下:

grant codebase "file:/home/123/123/jdk1.5.0_15/lib/tools.jar" { permission java.security.AllPermission; 
}; 

然后使用这个策略文件启动jstatd服务

[123@123 bin]$ pwd
/home/123/123/jdk1.5.0_15/bin
[123@123 bin]$ ./jstatd -J-Djava.security.policy=./jstatd.all.policy &

因为监控的过程中需要jstatd服务一直运行,所以加上了&,如果需要日志也可使用:

./jstatd -J-Djava.security.policy=./jstatd.all.policy -J-Djava.rmi.server.logCalls=true

接下来就可以在jvisualvm中配置监控该服务器上运行的java程序了,和在jvisualvm中配置监控tomcat服务器的操作过程是一样的

需要特别注意的是,有时在配置远程监控java程序的时候jvisualvm会报一个错误

点击查看错误详情:

 connection refused to host:127.0.0.1初步判断和主机名有关系

[123@123 bin]# hostname -i
127.0.0.1
[123@123 bin]# hostname 192.168.58.168

修改完重启jstatd服务(网上很多人说要修改主机的/etc/hosts文件,但是我自己测试修改/etc/hosts文件是没有效果的,必须要修改主机名

填写主机名:

 

这里要选添加一个jstatd连接:

 

直接选择默认配置即可(默认使用1099端口):

点击ok后,168上的所有java程序就会自动列出:

 

PS:

jvisualvm也是可以安装插件的,具体步骤为tool -> plugin ->aviable plugin,推荐一个非常好用的插件VisualGC

安装完这个插件后,将会增加新的监控条目Visual GC,可以看到虚拟机内存各个区的使用情况


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

相关文章

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

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 表名;注意 此语句会把表中数据清空