41、JVM实战:工具:VisualVM

27.2–工具–VisualVM–远程连接


1、准备工作

准备工作是为了测试使用

1.1、代码地址

https://gitee.com/DanShenGuiZu/learnDemo/tree/master/visualvm-learn/demo1

1.2、将jar包放到机器上

*

2、远程连接–JMX方式

2.1、修改JDK配置文件

# 进入修改目录
cd /usr/local/jdk1.8/jre/lib/management
# 拷贝配置文件
cp jmxremote.password.template jmxremote.password

#  去掉 # monitorRole  QED  的注释符号
#  去掉 # controlRole  R&D  的注释符号
sed -i 's/# monitorRole/monitorRole/p' jmxremote.password
sed -i 's/# controlRole/controlRole/p' jmxremote.password
#  查看内容
cat jmxremote.password

*

2.2、添加java启动参数

JAVA_OPTS="
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=9999 
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.authenticate=false 
-Djava.rmi.server.hostname=192.168.187.139 
-Dcom.sun.management.jmxremote.rmi.port=9999
"
 

2.2.1、-Djava.rmi.server.hostname=192.168.187.139

远程服务器的主机名

2.2.2、-Dcom.sun.management.jmxremote

1、 是否支持远程JMX访问;
2、 默认:true;

2.2.3、-Dcom.sun.management.jmxremote.port

1、 JMX远程监控端口号;
2、 需要在防火墙开放该端口;

2.2.4、-Dcom.sun.management.jmxremote.ssl=false

1、 表示是否对连接开启SSL加密;
2、 默认:开启;

2.2.5、-Dcom.sun.management.jmxremote.authenticate=false

1、 是否需要开启用户认证;
2、 默认:开启;

1、 如果开启需要额外配置授权文件;

2.2.6、 -Dcom.sun.management.jmxremote.rmi.port=9999

1、 RMI端口号(远程连接的端口);

1、 JMX在远程连接时,会随机开启一个RMI端口作为连接的数据端口;
2、 可以和JMX端口号相同;
2、 这里我们指定了RMI的端口号;

2.3、启动java

# 启动java
nohup java -server  \
-Xms512m   \
-Xmx512m   \
-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=9999   \
-Dcom.sun.management.jmxremote.ssl=false   \
-Dcom.sun.management.jmxremote.authenticate=false   \
-Djava.rmi.server.hostname=192.168.187.139  \
-Dcom.sun.management.jmxremote.rmi.port=9999  \
-jar /home/hd/java/demo1-0.0.1-SNAPSHOT.jar  /home/hd/java/log.log  2>&1  &

 
#  查看
ps -ef |grep  java

*

2.4、 连接

*

*
*
*

3、远程连接–jstatd方式

3.1、配置安全策略

vim /usr/local/jdk1.8/jre/lib/security/java.policy 

新增内容

permission java.security.AllPermission;

或者执行下面命令

# 在sun.security.pkcs11.disableKeyExtraction行的下一行,新增permission java.security.AllPermission;
sed -i '/"sun.security.pkcs11.disableKeyExtraction"/a\        permission java.security.AllPermission;'  /usr/local/jdk1.8/jre/lib/security/java.policy

*

3.2、启动jstatd

/usr/local/jdk1.8/bin/jstatd -J-Djava.security.policy=all.policy &

启动后会开启注册端口1099和一个随机的连接端口,注册端口也可通过-p参数指定,如

/usr/local/jdk1.8/bin/jstatd -J-Djava.security.policy=all.policy  -p 10003 &

3.3、查看

通常VisualVM会自动检测到jstatd连接并添加节点

如果没有自动添加,可以手动添加连接

*