使用的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 | tcp 0 0 :::37606 :::* 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