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