日常运维之JVM监控工具(jvisualvm)

本文将讲述如何通过Java VisualVM监控Tomcat或者Springboot打Jar之后服务器JVM情况。

总体VisualVM 监控是通过,JMX 和RMI实现JVM监控。

JMX(Java Management Extensions)是一个为应用程序植入管理功能的框架。JMX是一套标准的代理和服务,
实际上,用户可以在任何Java应用程序中使用这些代理和服务实现管理。主要用于对JAVA应用程序和JVM进行监控和管理。

 RMI(Java Remote Method Invocation),即Java远程方法调用。

文件目录:VisualVM 运行文件在对应JDK文件目录下面,本地(C:\Program Files\Java\jdk1.8.0_221\bin\jvisualvm.exe),也可以从网络上下载对应的软件。

监控类型:VisualVM支持远程的JVM监控和本地JVM监控,区别,远程JVM监控不支持GC的监控。

本地监控:

本地监控支持打开VisualVM软件既可以监控JVM情况,无需过多介绍。

远程监控:

1、远程监控需要设置服务(Tomcat)启动的参数,本文以Tomcat为例:修改tomcat的bin目录下的 catalina.sh

JAVA_OPTS="$JAVA_OPTS
-Djava.rmi.server.hostname=*.*.*.*
-Dcom.sun.management.jmxremote.port=18999
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false"

说明:
Djava.rmi.server.hostname 是监控机器的IP
Dcom.sun.management.jmxremote.port 启动监控JVM的JMX端口
Dcom.sun.management.jmxremote.ssl 是否进行SSL验证
Dcom.sun.management.jmxremote.authenticate 是否进行安全认证

2、远程监控Springboot打包Jar之后运维的监控,需要通过启动参数设置服务启动参数:由于启动参数受长度影响,顾需要把部分启动参数放入环境变量里面。

编辑环境变量
vi /etc/profile 
把一下内容追加到最后
export JAVA_OPTS='-Djava.rmi.server.hostname=*.*.*.* -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=18999 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false'

让环境变生效
source /etc/profile

Jar启动命令:
nohup java $JAVA_OPTS  -Dfile.encoding=utf-8 -jar java-service-demo-1.0.0-SNAPSHOT.jar > log.out 2>&1 &

注意:

一开始我认为JMX只有一个端口,实际是开了三个端口,分别是:

一个是JMX端口(需要指定),JMX远程连接端口。
一个是RMI端口(默认随机),实际通信用的端口。
一个是本地服务端口(随机),用于本地jstat、jconsole连接用,本地使用,我们不用理会。
程序连接,是先连上JMX端口,获取RMI端口,再连接RMI端口,问题就出在RMI端口上,一般没有配置指定端口号,程序默认会随机分配一个端口,容易让人忽略,在配置防火墙时只配了JMX端口,导致JMX连接不上。而且RMI端口是随机的,也不好配防火墙。

其实这个RMI端口是可以指定的,而且可以指定与JMX一致的端口,这样在配置防火墙时就方便多了,只需开放一个端口。
具体的配置是启动参数增加 -Dcom.sun.management.jmxremote.rmi.port=xxxx,目前常见的开源软件都支持这个配置,如Kafka,Tomcat等。

[root@iz86gm1t5pajewz javaApp]# netstat -nultp | grep java
tcp        0      0 0.0.0.0:18999           0.0.0.0:*               LISTEN      32083/java          
tcp        0      0 0.0.0.0:8090            0.0.0.0:*               LISTEN      32083/java          
tcp        0      0 0.0.0.0:38111           0.0.0.0:*               LISTEN      32083/java           
tcp        0      0 0.0.0.0:44135           0.0.0.0:*               LISTEN      32083/java           

其中18999是启动制定的端口,另外38111和44135 是随机生成的,可以关闭防火墙或者单独设置开放端口(每次重启都需要重新设置端口)。

启动visualVM,新建远程主机

新建JMX连接:

远程机器连接成功

远程线程监控 :

JVM监控:

可以通过分析堆,分析出占用内存较大的对象以及引用,可以分析出具体的问题代码。

日志连接过程中会出现连接失败的情况,可以通过分析VisualVM日志知道原因,日志文件查看方法如下:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值