jvisualvm监控远程jvm

Posted 幸福丶如此

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jvisualvm监控远程jvm相关的知识,希望对你有一定的参考价值。

方式一:JMX

1、服务端添加配置
tomcat/bin/catalina.sh文件中添加如下配置:

export JAVA_OPTS="-Xms256m -Xmx512m -Xss256m -XX:PermSize=512m -XX:MaxPermSize=1024m -Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=192.168.16.239 -Dcom.sun.management.jmxremote.port=9015 -Dcom.sun.management.jmxremote.rmi.port=9015 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"

详解:
要使用jmx远程监控功能,在远程java application启动时,必须通过jvm选项配置提供远程服务的端口:
-Dcom.sun.management.jmxremote.port=9015

一般同时指定为本地jmx client提供服务的端口与远程服务端口相同:
-Dcom.sun.management.jmxremote.rmi.port=9015

jmx远程服务默认是开启ssl和认证功能功能的,也可以通过jvm选项把这两个功能关闭:
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false

还可以设置虚拟机参数:
-Xms256m -Xmx512m -Xss256m -XX:PermSize=512m -XX:MaxPermSize=1024m

jmx默认是通过localhost的ip地址提供RMI服务的,如果要明确指定RMI服务地址或主机名(比如主机有多个接口,想使用非hostname关联的接口),可以通过以下选项显式指定:
-Djava.rmi.server.hostname=服务器IP

这样开启jmx远程监控功能的最小配置具体如下:

-Xms256m 
-Xmx512m 
-Xss256m 
-XX:PermSize=512m 
-XX:MaxPermSize=1024m 
-Dcom.sun.management.jmxremote 
-Djava.rmi.server.hostname=服务器IP 
-Dcom.sun.management.jmxremote.port=9015 
-Dcom.sun.management.jmxremote.rmi.port=9015 
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.authenticate=false 

2. 重启tomcat
java application启动后,远程监控工具就可以通过<远程主机名或ip地址>:8777,或jmx服务地址service:jmx:rmi:///jndi/rmi://<远程主机名或ip地址>:8777/jmxrmi连接远程java application进行监控了
3. 客户端操作
3.1 启动jvisualvm.exe
找到jdk安装目录进入bin目录下, 双击 jvisualvm.exe

3.2 配置JMX


方式二:JSTATD

1、创建 XXX.policy文件
jdk 1.8发布包中包括一个jstatd程序,使用jstatd需要指定一个policy文件,文件的后缀为 .policy,
比如:jstatd-all.policy的文件,
内容为:

grant codebase "file:/usr/java/jdk1.8.0_212/lib/tools.jar" 
    permission java.security.AllPermission;
;

或者

grant codebase "file:$java.home/../lib/tools.jar" 
    permission java.security.AllPermission;
;

2、启动

./jstatd -J-Djava.security.policy=jstatd-all.policy &
或者指定端口
./jstatd -J-Djava.security.policy=jstatd-all.policy -p 9016 &

3. 客户端操作
3.1 启动jvisualvm.exe
找到jdk安装目录进入bin目录下, 双击 jvisualvm.exe

3.2 配置JMX

3.3 连接jstatd


二、区别和利弊

1、 jmx是jvm自身提供的一个标准的jmx管理功能,client支持度非常好,jvm监控工具基本上都会支持这种连接方式。而且只要配置几个简单的选项就可以使用了,不需要单独启动一个第三方的只用来监控连接的应用程序
2、jstatd是jdk提供的一个单独的工具,一个主机只需要运行一个jstatd就可以监控主机上所有的java application,而因为jmx是集成在jvm中,如果主机上有多个java应用程序需要监控,需要每个java应用程序配置相应的jmx选项,而且远程服务端口不能相同,client监控时也需要与每个java应用程序建立单独的连接
3、java应用程序启动时如果没有配置相应的jmx选项,则在运行周期内都无法远程监控应用程序,这可能会丧失定位问题的机会。而jstatd需要监控时,可以随时运行并进行监控在jvisualvm中,只有通过jstatd连接才能使用visualGC插件功能
4、jstatd server的端口是随机选择的,在有些情况下可能无法使用。比如我司的办公区域与生产区域之间网络设置了防火墙,只允许某个范围的端口通过,这是公司级的,某个团队无法修改防火墙策略。同时办公区域也不能直接ssh访问生产区域服务器,必须经过一个relay,也不能使用jstatd over ssh的方式。个人觉得jstatd不能在启动时显示指定服务的端口是它的一个槽点
5、jstatd不支持cpu监控

以上是关于jvisualvm监控远程jvm的主要内容,如果未能解决你的问题,请参考以下文章

使用 jvisualvm 远程监控 JVM

JAVA 利用 jmc或jvisualvm 监控 本地或者远程JVM

jvisualvm监控远程jvm

使用jvisualvm进行远程监控

jvisualvm远程监控Tomcat

Spark(五十):使用JvisualVM监控Spark Executor JVM