jvisualvm的使用

2023-04-10 20:37:24

jvisualvm的使用

VisuaIVM(All-in-One Java Troubleshooting Tool)是一款免费的,集成了多个 JDK 命令行工具的可视化工具,它提供强大的分析能力,对 Java 应用程序做性能分析和调优。这些功能包括生成和分析海量数据、跟踪内存泄漏、监控垃圾回收器、执行内存和 CPU 分析,同时它还支持在 MBeans 上进行浏览和操作。是目前为止功能最强大的运行监测和故障处理工具。

1、Windows监控本地的JVM

1.1、首先需要配置JAVA环境

1.2、进入jvisualvm目录,路径:%JAVA_HOME%/bin下面的jvisualvm,双击jvisualvm.exe,弹出页面

 1.3、在上面界面中的”本地”中,选择需要监控的JAVA进程,点击连接

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

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

2、远程监控JVM(Tomcat示例)

远程服务器:centos7   中间件:Tomcat

3.1、服务端Tomcat配置

1、Tomcat的catalina.sh需要配置,重启tomcat

JAVA_OPTS="$JAVA_OPTS  -Djava.rmi.server.hostname=10.1.1.145"

JAVA_OPTS="$JAVA_OPTS  -Dcom.sun.management.jmxremote.port=9000"

JAVA_OPTS="$JAVA_OPTS  -Dcom.sun.management.jmxremote.rmi.port=9000"

JAVA_OPTS="$JAVA_OPTS  -Dcom.sun.management.jmxremote.ssl=false"

JAVA_OPTS="$JAVA_OPTS  -Dcom.sun.management.jmxremote.authenticate=false"

备注

JAVA_OPTS="$JAVA_OPTS  -Djava.rmi.server.hostname=10.1.1.145"   //指定jconsole连接的IP

JAVA_OPTS="$JAVA_OPTS  -Dcom.sun.management.jmxremote.port=9000" //指定jconsole连接端口

JAVA_OPTS="$JAVA_OPTS  -Dcom.sun.management.jmxremote.rmi.port=9000"  //这句一定要添加,不添加就无法成功

JAVA_OPTS="$JAVA_OPTS  -Dcom.sun.management.jmxremote.ssl=false"  //关闭ssl认证

JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=false"  //关闭用户密码认证

其他jar包应用,在启动文件中添加:

nohup java -Djava.rmi.server.hostname=10.1.1.145  -Dcom.sun.management.jmxremote.port=9000 -Dcom.sun.management.jmxremote.rmi.port=9000 -Dcom.sun.management.jmxremote.ssl=false  -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -jar    xxx.jar &

2、修改/etc/hosts

注释掉127.0.0.1  

新增:10.1.1.145  localhost localhost.localdomain

3、查看9000端口是否有

$netstat -ntlp

4、jvisualvm监控

点击”文件”,选择“添加JMX连接”

 

 

jvisualvm使用密码进行访问

1、服务端配置中修改:authenticate=true

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

   -Dcom.sun.management.jmxremote.pwd.file=     //指定正确的密码文件

JAVA_OPTS="$JAVA_OPTS  -Djava.rmi.server.hostname=10.1.1.145"

JAVA_OPTS="$JAVA_OPTS  -Dcom.sun.management.jmxremote.port=9000"

JAVA_OPTS="$JAVA_OPTS  -Dcom.sun.management.jmxremote.rmi.port=9000"

JAVA_OPTS="$JAVA_OPTS  -Dcom.sun.management.jmxremote.ssl=false"

JAVA_OPTS="$JAVA_OPTS  -Dcom.sun.management.jmxremote.authenticate=true"

JAVA_OPTS="$JAVA_OPTS  -Dcom.sun.management.jmxremote.pwd.file=/home/cg/java/jdk1.8.0_221/jre/lib/management/jmxremote.password"

2、Jdk/jre/lib/management下的jmxremote.password.template,拷贝一份叫jmxremote.password。进去将内容全部删去,添加一行

monitorRole  123456   //(用户名,密码)

controlRole   123456  //(用户名,密码)

备注:monitorRole  和monitorRole  用户已在jmxremote.access配置(模板)

3、将jmxremote.password和jmxremote.access改成600权限,和所属该程序用户

chmod 600 jmxremote.access  jmxremote.password

4、jvisualvm使用用户名和密码访问(例如:controlRole/123456)

 因为未配置SSL,所以这里选是

正常监控:

其他:如不输入用户名和密码,会自动弹出需要用户名和密码

 

 

参考:https://www.jianshu.com/p/0308983dc04c

https://blog.csdn.net/qq_23986927/article/details/113242408

  • 作者:fen_fen
  • 原文链接:https://blog.csdn.net/fen_fen/article/details/126012520
    更新时间:2023-04-10 20:37:24