利用visual vm监控服务器上的java虚拟机, 在默认情况下, 是没有办法使用 visual vm的插件visual gc的。 安装插件后打开visual gc的页签, 会显示「不受此JVM支持」
如下图
要解决这个问题需要Java自带的Jstatd服务, 使用步骤如下
第一, 在服务器上的java安装的bin下(如/usr/local/java/jdk1.8.0_91/bin)新建一个文件
文件名为jstatd.all.policy
文件内容如下
grant codebase "file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};
第二, 在当前目录中(bin)执行如下命令
./jstatd -J-Djava.rmi.server.hostname=192.168.110.227 -J-Djava.security.policy=jstatd.all.policy -p 9999
命令中的hostname是服务器的IP地址,-p是端口,这两项需要自己指定(网上使用默认IP地址和端口的命令,但我尝试了无法生效)。如果不指定端口。那么端口的默认值为1099。执行完毕后,使用telnet命令测试端口是否被监听。 如果一切正常, 说明jstatd服务已经配置成功了。(
1.启动jstatd
cd $JAVA_HOME/bin
./jstatd -J-Djava.security.policy=all.policy &
启动后会开启注册端口1099和一个随机的连接端口,注册端口也可通过-p参数指定,如./jstatd -J-Djava.security.policy=all.policy -p 10003 &
2.设置防火墙
除了把1099添加到防火墙规则外,还需要找到另外一个随机端口,也加入到规则中
执行
netstat -anp | grep *jstatd
可以看到除了1099,jstatd还监听了53040端口,把这个也加入到规则中,添加方法参照2.5
(注意:这个随机端口重启后会变化))
./jstatd -J-Djava.security.policy=all.policy &
第三,在电脑上打开visual vm软件,右击左侧菜单中的「远程」菜单项,输入目标服务器IP地址添加一个远程主机。 然后再右击新加的主机菜单项, 在弹出的菜单中选择「添加jstatd连接」。 在弹出的对话框中的文本框中输入在第二步配置中指定的端口号(默认是1099)
点击确定后,Visual GC插件就可以正常使用了
参考: