Jstatd - 监控您的 JVM 的创建和终止
介绍 Jstatd
jstatd - 监控已检测的 Java HotSpot VM 的创建和终止
概要
注意:此命令为实验性命令,不受支持。
jstatd [options]
选项
这表示 jstatd 命令行选项。请参阅 Jstatd 命令的选项.
描述
jstatd 命令是一个 RMI 服务器应用程序,它监控已检测的 Java HotSpot VM 的创建和终止,并提供一个接口,使远程监控工具 jstat 和 jps 能够连接到在本地主机上运行的 JVM,并收集有关 JVM 进程的信息。
jstatd 服务器需要本地主机上的 RMI 注册表。jstatd 服务器尝试连接到默认端口上的 RMI 注册表,或者连接到您使用 -p port 选项指定的端口。如果未找到 RMI 注册表,则将在 jstatd 应用程序中创建一个注册表,该注册表绑定到由 -p port 选项指示的端口,或者在省略 -p port 选项时绑定到默认 RMI 注册表端口。您可以通过指定 -nr 选项来停止创建内部 RMI 注册表。
Jstatd 命令的选项
-nr
此选项在未找到现有 RMI 注册表时,不会尝试在 jstatd 进程中创建内部 RMI 注册表。
-p port
此选项设置预期找到 RMI 注册表的端口号,或者在未找到时,在未指定 -nr 选项的情况下创建注册表。
-r rmiport
此选项设置 RMI 连接器绑定的端口号。如果未指定,则使用随机可用端口。
-n rminame
此选项设置在 RMI 注册表中绑定远程 RMI 对象的名称。默认名称为 JStatRemoteHost。如果在同一主机上启动了多个 jstatd 服务器,则可以通过指定此选项使每个服务器的导出 RMI 对象的名称变得唯一。但是,这样做需要在监控客户端的 hostid 和 vmid 字符串中包含唯一的服务器名称。
-Joption
此选项将 Java option 传递给 JVM,其中选项是 Java 应用程序启动器参考页上描述的选项之一。例如,-J-Xms48m 将启动内存设置为 48 MB。请参阅 java.
安全性
jstatd 服务器只能监控它具有相应本机访问权限的 JVM。因此,jstatd 进程必须以与目标 JVM 相同的用户凭据运行。某些用户凭据(例如 Linux 和 OS X 操作系统中的 root 用户)具有访问系统上任何 JVM 导出的检测的权限。以这种凭据运行的 jstatd 进程可以监控系统上的任何 JVM,但这会带来额外的安全问题。
jstatd 服务器不提供任何远程客户端身份验证。因此,运行 jstatd 服务器进程会将 jstatd 进程具有访问权限的所有 JVM 导出的检测公开给网络上的任何用户。这种公开在您的环境中可能是不可取的,因此,在启动 jstatd 进程之前,应考虑本地安全策略,尤其是在生产环境或不安全的网络中。
jstatd 服务器在未安装其他安全管理器的情况下安装 RMISecurityPolicy 的实例,因此需要指定安全策略文件。策略文件必须符合默认策略实现和策略文件语法。
如果您的安全问题无法通过自定义策略文件解决,那么最安全的做法是不运行 jstatd 服务器,并在本地使用 jstat 和 jps 工具。但是,当使用 jps 获取已检测 JVM 的列表时,该列表将不包括在 docker 容器中运行的任何 JVM。
远程接口
jstatd 进程导出的接口是专有的,并且保证会发生变化。不鼓励用户和开发人员写入此接口。
示例
以下是 jstatd 命令的示例。jstatd 脚本会自动在后台启动服务器。
内部 RMI 注册表
此示例演示如何使用内部 RMI 注册表启动 jstatd 会话。此示例假设没有其他服务器绑定到默认 RMI 注册表端口(端口 1099)。
jstatd -J-Djava.security.policy=all.policy
外部 RMI 注册表
此示例使用外部 RMI 注册表启动 jstatd 会话。
rmiregistry&
jstatd -J-Djava.security.policy=all.policy
此示例使用端口 2020 上的外部 RMI 注册表服务器启动 jstatd 会话。
jrmiregistry 2020&
jstatd -J-Djava.security.policy=all.policy -p 2020
此示例使用端口 2020 上的外部 RMI 注册表服务器启动 jstatd 会话,并将 JMX 连接器绑定到端口 2021。
jrmiregistry 2020&
jstatd -J-Djava.security.policy=all.policy -p 2020 -r 2021
此示例使用端口 2020 上的外部 RMI 注册表启动 jstatd 会话,该注册表绑定到 AlternateJstatdServerName。
rmiregistry 2020&
jstatd -J-Djava.security.policy=all.policy -p 2020 -n AlternateJstatdServerName
停止创建进程内 RMI 注册表
此示例启动一个 jstatd 会话,该会话在未找到 RMI 注册表时不会创建注册表。此示例假设 RMI 注册表已在运行。如果 RMI 注册表未运行,则会显示错误消息。
jstatd -J-Djava.security.policy=all.policy -nr
启用 RMI 日志记录
此示例启动一个启用了 RMI 日志记录功能的 jstatd 会话。此技术作为故障排除工具或用于监控服务器活动非常有用。
jstatd -J-Djava.security.policy=all.policy -J-Djava.rmi.server.logCalls=true
上次更新: 2021 年 9 月 14 日