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
字符串中包含唯一的服务器名称。
-J
option
此选项将 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 日