The jstatd Command

名称

jstatd - 监视被仪器化的Java HotSpot虚拟机的创建和终止

概要

注意:此命令是实验性的,不受支持。

jstatd [选项]

选项
这表示jstatd命令行选项。请参阅jstatd命令选项

描述

jstatd命令是一个RMI服务器应用程序,用于监视被仪器化的Java HotSpot虚拟机的创建和终止,并提供一个接口以启用远程监视工具jstatjps连接到在本地主机上运行的JVM,并收集有关JVM进程的信息。

jstatd服务器需要在本地主机上有一个RMI注册表。jstatd服务器尝试连接到默认端口上的RMI注册表,或者您可以使用-p port选项指定的端口。如果未找到RMI注册表,则在jstatd应用程序内创建一个RMI注册表,该注册表绑定到由-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对象的名称唯一。但是,这样做需要在监视客户端的hostidvmid字符串中包含唯一的服务器名称。
-Joption
此选项将Java option传递给JVM,其中选项是Java应用程序启动器参考页面上描述的选项之一。例如,-J-Xms48m将启动内存设置为48 MB。请参阅java

安全性

jstatd服务器只能监视具有适当本机访问权限的JVM。因此,jstatd进程必须以与目标JVM相同的用户凭据运行。某些用户凭据,例如Linux和macOS操作系统中的root用户,具有权限访问系统上任何JVM导出的仪器化。以这些凭据运行的jstatd进程可以监视系统上的任何JVM,但会引入额外的安全问题。

jstatd服务器不提供对远程客户端的任何身份验证。因此,运行jstatd服务器进程会使jstatd进程具有对网络上任何用户都可以访问的所有JVM导出的仪器化。在您的环境中,这种暴露可能是不希望的,因此在启动jstatd进程之前,应考虑本地安全策略,特别是在生产环境或不安全的网络上。

出于安全目的,jstatd服务器使用RMI ObjectInputFilter仅允许反序列化必要的类。

如果您的安全问题无法解决,则最安全的操作是不运行jstatd服务器,并在本地使用jstatjps工具。但是,使用jps获取仪器化JVM列表时,列表将不包括在docker容器中运行的任何JVM。

远程接口

jstatd进程导出的接口是专有的,并且保证会更改。建议用户和开发人员不要对此接口进行编写。

示例

以下是jstatd命令的示例。jstatd脚本会自动在后台启动服务器。

内部RMI注册表

此示例显示如何使用内部RMI注册表启动jstatd会话。此示例假定没有其他服务器绑定到默认RMI注册表端口(端口1099)。

jstatd

外部RMI注册表

此示例使用外部RMI注册表启动jstatd会话。

rmiregistry&
jstatd

此示例在端口2020上启动具有外部RMI注册表的jstatd会话。

jrmiregistry 2020&
jstatd -p 2020

此示例在端口2020上启动具有外部RMI注册表服务器和绑定到端口2021的JMX连接器的jstatd会话。

jrmiregistry 2020&
jstatd -p 2020 -r 2021

此示例在端口2020上启动具有绑定到AlternateJstatdServerName的外部RMI注册表的jstatd会话。

rmiregistry 2020&
jstatd -p 2020 -n AlternateJstatdServerName

停止创建内部RMI注册表

此示例启动一个jstatd会话,当未找到RMI注册表时不会创建一个。此示例假定RMI注册表已经在运行。如果未运行RMI注册表,则会显示错误消息。

jstatd -nr

启用RMI日志记录

此示例启动一个具有启用RMI日志记录功能的jstatd会话。此技术对于故障排除或监视服务器活动非常有用。

jstatd -J-Djava.rmi.server.logCalls=true