Java 工具集教程

jstatd.exe 启动RMI服务,远程监控虚拟机

jstatd.exe 是 Java 提供的一个工具,用于创建一个远程 RMI(Remote Method Invocation,远程方法调用)服务器应用程序,以便允许远程监控和管理本地 Java 虚拟机(JVM)的性能统计信息。

通过 jstatd 启动的服务器可以接收来自远程客户端(如 jconsole )的连接请求,并为其提供本地运行的 JVM 的性能数据。

在使用 jstatd 时,通常需要注意设置安全策略,以确保只有授权的客户端能够连接和获取性能数据。

工具用途

该工具有两个用途:

  • 监控JVM:jstatd 允许远程监控工具连接到运行在本机或其他机器上的 JVM,从而获取 JVM 的运行状态、内存使用、垃圾回收等统计信息。

  • RMI服务:jstatd 实际上是一个 RMI 服务器,它启动后监听一个特定的端口(默认为1099),等待远程连接请求。

命令语法

jstatd [-nr] [-p port] [-n rminame]

命令选项

命令选项如下:

  • -nr

  • -p port

  • -n rminame

命令示例

启动 RMI 服务

启动 RMI 服务步骤如下:

(1)在需要被监控的服务器上面,通过 jstatd 来启动 RMI 服务。如下:

D:\share_dir\ShareDoc> jstatd -nr
Could not create remote object
access denied ("java.util.PropertyPermission" "java.rmi.server.ignoreSubClasses" "write")
java.security.AccessControlException: access denied ("java.util.PropertyPermission" "java.rmi.server.ignoreSubClasses" "write")
        at java.security.AccessControlContext.checkPermission(AccessControlContext.java:457)
        at java.security.AccessController.checkPermission(AccessController.java:884)
        at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
        at java.lang.System.setProperty(System.java:792)
        at sun.tools.jstatd.Jstatd.main(Jstatd.java:139)

上面错误信息表面:在尝试创建一个远程对象时,由于安全策略的限制,操作被拒绝。具体来说,是因为 Java 安全管理器(SecurityManager)拒绝了尝试写入 java.rmi.server.ignoreSubClasses 系统属性的操作。

为了解决上面问题,需要配置 Java 安全访问策略,在当前目录下面创建 jstatd.all.policy 策略文件,文件内容如下:

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

然后,通过如下命令启动 RMI 服务,如下:

D:\share_dir\ShareDoc> jstatd -J-Djava.security.policy=jstatd.all.policy

执行完上述命令后,如果没有报错,则说明启动成功。我们还可以通过 netstat 查看 1099 端口,如下:

D:\share_dir\ShareDoc> netstat -ano | findstr 1099
  TCP    0.0.0.0:1099           0.0.0.0:0              LISTENING       6676
  TCP    192.168.30.1:52324     192.168.30.1:1099      TIME_WAIT       0
  TCP    [::]:1099              [::]:0                 LISTENING       6676

如果你想指定 RMI 服务器的主机名或IP地址,如下:

jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=192.168.22.249

连接远程JVM

一旦 RMI 服务启动,就可以使用如 jconsole、VisualVM 等工具连接到 RMI 服务器,从而远程监控 JVM。

这些工具将连接到RMI服务器指定的端口(默认为1099),并发送JMX(Java Management Extensions)请求以获取JVM的统计信息。

注意事项

  • 安全性:由于 jstatd 允许远程连接,因此必须注意安全性。确保 jstatd.all.policy 文件中的权限设置是合理的,并且只允许受信任的主机连接到RMI服务器。

  • 防火墙和网络配置:确保RMI服务器监听的端口(默认为1099)没有被防火墙阻止,并且网络配置允许远程连接。

  • 版本兼容性:不同版本的JDK可能具有不同版本的 jstatd 工具,因此请确保你使用的 jstatd 版本与你的JDK版本兼容。

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号