jstatd--收集远程主机信息

     命令jstatd是一个RMI服务端程序,它的做用至关于代理服务器,创建本地计算机与远程监控工具的通讯。jstatd服务器将本级的Java应用程序信息传递到远程计算机。
java

    当咱们直接打开jstatd服务器可能会抛出访问拒绝的异常。
安全

    wKiom1i2eoegU8NgAAEus_P_fYU446.png-wh_50

    这是因为jstatd程序没有足够的权限所致。可使用java的安全策略,为其分配相应的权限,下面代码为jstatd分配了最大的权限,将其保存在jstatd.all.policy文件中:
服务器

            grant codebase "file:/usr/java/jdk1.8.0_25/lib/tools.jar" {tcp

                     permission java.security.AllPermission;ide

            };工具

    wKioL1i2e2Oyq4WfAACXbePcv9A537.png-wh_50


    而后使用如下命令再次开启jstatd服务器
测试

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

    服务器启动成功。-J参数是一个公共的参数,如jps、jstat等命令均可以接受这个参数。因为jps、jstat命令自己也是Java应用程序,-J参数能够为jps等命令自己设置其java虚拟机参数
.net

    默认状况下,jstatd将在1099端口开启RMI服务器。
代理

    [root@zhw lib]# ss -lntup|grep 1099

      tcp    LISTEN     0      50        *:1099                  *:*                   users:(("jstatd",pid=14542,fd=14))

   接下来咱们就能够在另外一个机器上来查看本机的信息了。(咱们规定这个服务器的域名为 dev.kidcares.cn)

   当咱们测试时,出下下面的错误。

    [root@zhw lib]# jstat -gcutil 24252@dev.kidcares.cn:1099

    Remote Exception attaching to rmi://24252@dev.kidcares.cn:1099

后来查询资料得知:

jstatd能够经过 内部 rmi和外部rmi 注册,除了在启动参数中加入权限意外,也必须加入Java.rmi.server.hostname=101.200.157.115 ,不然会出现 Remote Exception attaching to rmi://24252@101.200.157.115, 缘由跟jconsole同样,服务端传过来的IP地址为 hostname -i的值,因此不必定是101.200.157.115

完整的jstatd启动选项为  

jstatd -J-Djava.rmi.server.hostname=101.200.157.115  -J-Djava.security.policy=jstatd.all.policy

再次执行:

[root@zhw lib]# jstat -gcutil 24252@dev.kidcares.cn:1099

  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT   

  0.00  62.09  80.24  32.11  98.09  98.45     67    3.402     2    2.912    6.314

相关文章
相关标签/搜索