基于jatatd实现远程连接
jstatd是一个基于RMI (Remove Method Invocation)的服务程序,它用于监控基于HotSpot的JVM中资源的创建及销毁,并且提供了一个远程接口,从而允许监控工具远程地连接到本地的JVM
配置安全策略
默认情况下,Java的安全策略比较严格,并不允许jstatd直接启动,因此,需要设置下安全策略。不同的JDK版本配置方式不同,主要是由于JDK9开始,已经不再有tools.jar导致的。
创建安全策略文件,命名为:jstatd.all.policy,下面是各个版本的配置方式:
Jdk8以及更低版本
grant codebase "file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};
jdk9以及更高版本
grant codebase "jrt:/jdk.jstatd" {
permission java.security.AllPermission;
};
grant codebase "jrt:/jdk.internal.jvmstat" {
permission java.security.AllPermission;
};
启动jstatd
根据jdk版本创建文件,写入上面的内容
[bushro@hadoop132 ~]$ vim jstatd.all.policy
- 远程服务器上执行
- 执行jstatd命令的用户和你jstatd想连接的应用必须拥有相同的用户凭证。如果说jar是使用root启动的,那么下面的命令也要用root执行。
在jstatd.all.policy所在目,执行如下命令
jstatd -J-Djava.security.policy=./jstatd.all.policy \
-J-Djava.rmi.server.hostname=192.168.233.132 \
-J-Djava.rmi.server.logCalls=true \
-p 1231
- java.security.policy:指定上面策略文件的路径,使用相对路径或绝对路径均可
- java.rmi.server.hostname:指定成允许连接的IP地址、主机名或域名
- java.rmi.server.logCalls:打印日志
- -p:用来指定注册端口,默认1099
另外开一个窗口查看jstatd使用到的端口
开放监听端口或者关闭防火墙都可以
# 开放1231(取决于启动jstatd的-p参数)、14776端口(随机,