使用的JDK版本为jdk1.7.0_79。
一、常用用法
1 | jstatd [-n ServerId] |
二、含义与选项
使用jps,jstat命令不仅可监控本地主机上的JVM进程,也可监控远端主机上的JVM进程,前者称为“本地模式”,后者称为“联网模式”。“联网模式”下的整个监控体系实质上是一个RMI应用程序。在“联网模式”下,一般情况下,远端主机上“运行rmiregistry服务,运行RMI Server”,本地主机上“运行RMI Client”,整个体系中“无需运行Web Server服务(因为所有相关类都可在本地获取)”。
在远端主机上,通过运行jstatd命令开启RMI Server(需要注意的是,运行jstatd命令同时会自动运行rmiregistry服务,而无需手动运行),使用“ServerId”选项值作为RMI Server内向rmiregistry服务注册所生成Remote Object实例的名称(如果未指定,则使用默认名称);在本地主机上,运行jps,jstat命令作为RMI Client。
三、具体使用
3.1、环境描述
远端主机内网IP地址为“10.110.20.100”,其上运行有两个JVM进程,JVM进程ID分别为“821”和“11220”。
3.2、实际运行
3.2.1、远端主机
在远端主机上,执行jstatd -J-Djava.security.policy=server.policy -n remoteObject1
命令开启RMI Server(同时开启rmiregistry服务),并使用“remoteObject1”名称向rmiregistry服务注册所生成的Remote Object实例,通过“-J-Djava.security.policy”选项指定安全访问策略文件(可参见《RMI》),在这里“server.policy”文件内容被简单编辑为:
1 | grant { |
假设运行jstatd命令得到的JVM进程ID为“2891”,执行netstat -anp | grep '2891'
命令,可得到如下结果:
1 | tcp 0 0 :::1099 :::* LISTEN 2891/jstatd |
以上结果证明,运行jstatd命令得到的JVM进程开启了rmiregistry服务(rmiregistry服务默认监听1099端口)和RMI Server(57818作为Remote Object实例绑定到的端口)。
3.2.2、本地主机
3.2.2.1、jps命令
在本地主机上,执行jps rmi://10.110.20.100/remoteObject1
命令作为RMI Client与远端主机上的rmiregistry服务和RMI Server进行交互,列出在远端主机运行的有权限进行访问的JVM进程的状态信息。执行jps命令时可使用的选项参数可具体参考该命令的“本地模式”用法。
执行以上命令,得到最终结果如下:
1 | 821 Agent |
3.2.2.2、jstat命令
在本地主机上,执行jstat rmi://11220@10.110.20.100/remoteObject1
命令作为RMI Client与远端主机上的rmiregistry服务和RMI Server进行交互,而达到监控远端主机上相应JVM进程的目标。执行jstat命令时可使用的选项参数可具体参考该命令的“本地模式”用法。
执行jstat -gcutil rmi://11220@10.110.20.100/remoteObject1 1000 3
命令,得到最终结果如下:
1 | S0 S1 E O P YGC YGCT FGC FGCT GCT |
参考文献: [1]http://docs.oracle.com/javase/7/docs/technotes/tools/share/jstatd.html [2]man jstatd