0%

jsadebugd命令

使用的JDK版本为jdk1.7.0_79。

一、常用用法

1
jsadebugd PID [ServerId]

二、含义与选项

使用jinfo,jmap,jstack命令不仅可监控本地主机上的JVM进程,也可监控远端主机上的JVM进程,前者称为“本地模式”,后者称为“联网模式”。“联网模式”下的整个监控体系实质上是一个RMI应用程序。在“联网模式”下,一般情况下,远端主机上“运行rmiregistry服务,运行RMI Server”,本地主机上“运行RMI Client”,整个体系中“无需运行Web Server服务(因为所有相关类都可在本地获取)”。
在远端主机上,通过运行jsadebugd命令开启RMI Server(需要注意的是,运行jsadebugd命令同时会自动运行rmiregistry服务,而无需手动运行),使用“PID”选项值指定远端主机上待被监控的JVM进程ID,使用“ServerId”选项值作为RMI Server内向rmiregistry服务注册所生成Remote Object实例的名称(如果未指定,则使用默认名称);在本地主机上,运行jinfo,jmap,jstack命令作为RMI Client。

三、具体使用

3.1、环境描述

远端主机内网IP地址为“10.110.20.100”,其上运行的待被监控的JVM进程ID为“4272”。

3.2、实际运行

3.2.1、远端主机

在远端主机上,执行jsadebugd 4272 remoteObject1命令开启RMI Server(同时开启rmiregistry服务),并使用“remoteObject1”名称向rmiregistry服务注册所生成的Remote Object实例,被监控JVM进程ID为“4272”。
假设运行jsadebugd命令得到的JVM进程ID为“5271”,执行netstat -anp | grep '5271'命令,可得到如下结果:

1
2
tcp        0      0 :::37606                    :::*                        LISTEN      5271/jsadebugd      
tcp 0 0 :::1099 :::* LISTEN 5271/jsadebugd

以上结果证明,运行jsadebugd命令得到的JVM进程开启了rmiregistry服务(rmiregistry服务默认监听1099端口)和RMI Server(37606作为Remote Object实例绑定到的端口)。

3.2.2、本地主机

在本地主机上,执行jinfo/jmap/jstack remoteObject1@10.110.20.100命令作为RMI Client与远端主机上的rmiregistry服务和RMI Server进行交互,而达到监控远端主机上相应JVM进程的目标。执行jinfo,jmap,jstack命令时可使用的选项参数可具体参考这些命令的“本地模式”用法。

四、其他

本地主机和远端主机上的JDK版本需要完全一致,否则会报错。


参考文献: [1]http://docs.oracle.com/javase/7/docs/technotes/tools/share/jsadebugd.html [2]man jsadebugd
您的支持将鼓励我继续分享!