Java jstatd详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java jstatd详解相关的知识,希望对你有一定的参考价值。

jstatd 命令全称: Virtual Machine jstat Daemon

DESCRIPTION

       The  jstatd tool is an RMI server application that monitors for the creation and termination of instrumented HotSpot Java            virtual machines (JVMs) and pro-

       vides a interface to allow remote monitoring tools to attach to JVMs running on the local host.

       The jstatd server requires the presence of an RMI registry on the local host. The jstatd server will attempt to attach to the RMI registry on the  default

       port,  or  on  the  port indicated by the -p port option.  If an RMI registry is not found, one will be created within the jstatd application bound to the

       port indicated by the -p port option or to the default RMI registry port if -p port is omitted. Creation of an internal RMI registry can be  inhibited  by

       specifying the -nr option.

       NOTE  -  This  utility is unsupported and may or may not be available in future versions of the J2SE SDK.  It is not currently available on the Windows 98

       and Windows ME platforms.

jstatd是一个基于RMI(Remove Method Invocation)的服务程序,它用于监控基于HotSpot的JVM中资源的创建及销毁,并且提供了一个远程接口允许远程的监控工具连接到本地的JVM执行命令。

    jstatd是基于RMI的,所以在运行jstatd的服务器上必须存在RMI注册中心,如果没有通过选项"-p port"指定要连接的端口,jstatd会尝试连接RMI注册中心的默认端口。后面会谈到如何连接到一个默认的RMI内部注册中心,如何禁止默认的RMI内部注册中心的创建,以及如何启动一个外部注册中心

Option参数:jstatd 命令行参数可以是任何顺序的,如果出现冗余或相互冲突的参数,最后一个参数优先。

-nr: 当没找到rmi registry服务,在jstatd内部不会试图创建rim registry.

-p:指定注册的rmi registry服务器端口,如果没有找到在此端口监听的registry服务,并且没有指定参数-nr,将会在jstatd内部以指定的端口创建registry.

-n rminame :指定绑定到rim registry中远程服务对象的名称,默认为JStatRemoteHost;如果同一台主机上同时运行了多个jstatd服务,rminame可以用于唯一确定一个jstatd服务;这里需要注意一下,如果开启了这个选项,那么监控客户端远程连接时,必须同时指定hostid及vmid,才可以唯一确定要连接的服务

 -Joption: 用于传递jvm选项到由javac调用的java加载器中,例如,“-J-Xms48m”将把启动内存设置为48M,使用-J选项可以非常方便的向基于Java的开发的底层虚拟机应用程序传递参数。

jstatd安全:

如果没设置其他安全管理器,jstatd将使用RMISecurityPolicy,并且需要指定安全策略文件. 安全策略文件必须符合安全策略语法,通过命令

-J-Djava.security.policy=file指定策略文件. 一下的安全策略可以访问所有代码库.

grant codebase "file:${java.home}/../lib/tools.jar" {

                    permission java.security.AllPermission;

              };

保存上面3行安全策略,例如保存在文件名为statd.all.policy文件中。通过下面命令启动jstatd就可以使用安全策略.

jstatd -J-Djava.security.policy=jstatd.all.policy

 

示例:

(1)如果没有rmi registry 在默认1099端口监听,将在内部自动创建registry的rmi regitry服务》

jstatd -J-Djava.security.policy=all.policy

 

(2)使用外部已经存在的rmi registry服务. 先开启rmi registry服务,再开启jstatd.

rmiregistry 5000

jstatd -J-Djava.security.policy=all.policy -p 5000

此时用jps命令如: jps localhost:5000

 

(3)指定vmid

jstatd -J-Djava.security.policy=all.policy -p 2020 -n AlternateJstatdServerName

 

 

 

 

 

以上是关于Java jstatd详解的主要内容,如果未能解决你的问题,请参考以下文章

jstatd--收集远程主机信息

Visual GC提示"不受此JVM支持“解决方案(配置jstatd)

VisualVM使用Jstatd远程监控服务器

jmx/jstatd 通过 ssh 隧道访问远程机器

java RMI 如何返回远程对象的引用

使用 VisualVM 进行 JAVA 远程分析