如何使用jdk自带的visualvm工具

如何使用jdk自带的visualvm工具,第1张

启动jvisualvm

首先到JDK安装目录/bin目录下,双击jvisualvm.exe文件启动

进入jvisualvm界面,右侧为正在运行的Java程序,小编打开了一个jconsole程序来做示例

双击要监控的Java进行,有关监控进程的概要,监控,线程等信息都会以图像的方式显现出来,能更方便的对Java运行程序做分析

右键左边栏,正在运行的Java程序,可以执行Dump,线程,Dump堆的 *** 作并且可以将正在运行的程序进行快照储备,同时可以设置在发生内存溢出时自动生成Dump文件。

右键【文件】-->【添加远程主机】可对远程运行的Java程序进行监控

菜单栏,工具-->插件 辅助功能 可以帮助我们更细致对Java程序进行监视分析,比如Visual GC 能显示年轻代里的Eden区和survivor区的实时数据

Visualvm是一个非常实用的Java 监控工具, *** 作十分方便,多用几次就会很快的入手啦。

先下载linux的系统映像,我在官网上下载的是iso格式的。在vm上新建虚拟机,然后一直一步步按照提示来就ok了,里面有linux的,和windows的安装一样。实在不懂就在百度文库上看教程,图文并茂,比我给你说好多了。 哦,还有,vm原版的是英文的,不...

1.jvisualvm在安装完jdk的时候就已经存在了,放在jdk安装目录bin下面

2.jvisualvm的使用

/usr/local/java/bin/jvisualvm & 

3.监控本地和监控远程

1)监控本地:

标签介绍:

概述:显示的是该服务器的启动和系统参数,可以通过与服务器的实际参数进行对比查看是否有内存溢出

监控:显示的是当前系统的CPU、内存、类和线程的相关资源的使用情况。其中"堆dump"可以查看堆的详细状态,包括堆的概况,里面所有的类,还能点进具体的一个类查看这个类的状态。

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

抽样器:(可针对cpu和内存进行抽样监控)

2).远程tomcat监控

1)修改修改 /{tomcat path}/bin/catalina.sh, 找到第一个没注释的JAVA_OPTS,在前面添加

2)将8099端口开放---->添加防火墙

-A INPUT -m state --state NEW -m tcp -p tcp --dport 8099 -j ACCEPT

重启防火墙---->/etc/init.d/iptables restart 

3)jvisualvm添加远程tomcat监控

3)远程java应用程序(非tomcat):

方法1:(在启动的时候添加启动参数)

nohup java -Dcom.sun.management.jmxremote 

-Dcom.sun.management.jmxremote.port=9005 

-Dcom.sun.management.jmxremote.authenticate=false 

-Dcom.sun.management.jmxremote.ssl=false 

-Djava.net.preferIPv4Stack=true 

-Djava.rmi.server.hostname=192.168.9.174  -jar monitor_tuning-0.0.1-SNAPSHOT.jar &

注意端口号9005要开放,添加防火墙 !

方法2:使用jstatd

1)在$JAVA_HOME/bin目录下新建一个文件jstatd.all.policy(名称随意),内容如下:

grant codebase "file:/usr/local/java/lib/tools.jar" { 

   permission java.security.AllPermission 

}

2)然后执行

 jstatd  -J-Djava.security.policy=jstatd.all.policy  -J-Djava.rmi.server.hostname=192.168.9.174  -p 1099  &

在jvisualvm里面添加远程主机 192.168.9.174,然后右键添加jstatd连接,端口默认。jvisualvm即可扫描出所有正在运行的JVM,点击即可监控。

注意:此处需要添加防火墙(此处好多文章都没有说关于防火墙的问题)

两种方法比较:

1)jmx是jvm自身提供的一个标准的jmx管理功能,client支持度非常好,jvm监控工具基本上都会支持这种连接方式。而且只要配置几个简单的选项就可以使用了,不需要单独启动一个第三方的只用来监控连接的应用程序

2)jstatd是jdk提供的一个单独的工具,一个主机只需要运行一个jstatd就可以监控主机上所有的java application,而因为jmx是集成在jvm中,如果主机上有多个java应用程序需要监控,需要每个java应用程序配置相应的jmx选项,而且远程服务端口不能相同,client监控时也需要与每个java应用程序建立单独的连接

3)java应用程序启动时如果没有配置相应的jmx选项,则在运行周期内都无法远程监控应用程序,这可能会丧失定位问题的机会。而jstatd需要监控时,可以随时运行并进行监控

4) 在jvisualvm中,只有通过jstatd连接才能使用visualGC插件功能

5)jstatd server的端口是随机选择的,在有些情况下可能无法使用。比如我司的办公区域与生产区域之间网络设置了防火墙,只允许某个范围的端口通过,这是公司级的,某个团队无法修改防火墙策略。同时办公区域也不能直接ssh访问生产区域服务器,必须经过一个relay,也不能使用jstatd over ssh的方式。个人觉得jstatd不能在启动时显示指定服务的端口是它的一个槽点

4.插件安装:

参考文章:https://www.cnblogs.com/looyee/articles/11065093.html


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7977866.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-12
下一篇 2023-04-12

发表评论

登录后才能评论

评论列表(0条)

保存