VisualVM是JDK自带的一款java应用性能监测工具。它可以做到:
- 显示虚拟机进程以及进程的配置,环境信息
- 监视应用程序的CPU,GC,堆,方法区以及线程的信息
- dump以及分析堆转储快照
- 方法级的程序运行性能分析,找出调用最多,运行时间最长的方法
- 离线程序快照:收集程序的运行时配置,纯种dump,内存dump等信息建立一个快照,可以将快照发送给开发者进行Bug反馈
- 其他pulgins的功能支持。。。
当我们的应用上线(一般都会布署在虚拟机上)后,有时需要对其进行性能分析,此时我们可以用本地的VisualVM远程连接虚拟机上的应用来达到查看监控JVM的目的
开始
我这里启动的是springboot应用,是以jar包形式启动的哦。
先看一下当前的主机地址是否和公网地址(外网访问的地址)一致
hostname -i
如果显示的地址不一致的话,请先在/etc/hosts
文件里添加一行,例如
47.106.xxx.xxx wesker
然后再执行看看生效了没有
hostname wesker
hostname -i
加入启动参数
java \
#添加jmx远程支持start
-Djava.rmi.server.hostname=47.106.xxx.xxx \
-Dcom.sun.management.jmxremote=true \
-Dcom.sun.management.jmxremote.port=33306\
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
#添加jmx远程支持end
-jar web.jar
这里没有开户登陆鉴权和ssl连接,所以authenticate=false
和ssl=false
端口需要配置允许远程访问,具体配置流程可参考我的另一篇文章
阿里云服务器(centos7) 设置mysql账号密码开放3306端口实现远程登陆
VisualVM建立连接
在本地(windows)jdk目录下的bin目录里,打开jvisualvm.exe,右键“远程”添加主机名
然后添加JMX连接
输入ip:port直接点击确定完成连接
如果提示
无法使用 service:jmx:rmi:///jndi/rmi://xxx.xxx.xxx.xxx:33306/jmxrmi 连接到 xxx.xxx.xxx.xxx:33306
请把防火墙关一下
service iptables stop
因为除了JMX server指定的监听端口号外,JMXserver还会监听一到两个随机端口号,如果你不想关闭防火墙可以执行以下操作:
- 拿到当前监听的端口
netstat -tupln |grep 33306
- 查看监听的随机端口
#lsof 没有安装的话 安装一个 yum install lsof
lsof -i|grep 2516
- 把这几个端口配置到安全组规则去吧(很麻烦,每次都要设置,所以我直接关防火墙省事多了)
结束
看一下连接成功的界面吧