远程监控JVM之一命令行(通过jstatd采集,jstat远程获取jvm运行数据)

在被监测的服务器(远程机器)上需要启动一个daemon:jstatd
1、远程机器启动jstatd
1.1、首先需要准备一个java.policy文件,保存到如/home/admin/jstatd.java.policy
grant codebase "file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};
1.2、启动jstatd(通过如下命令行启动)
jstatd -J-Djava.security.policy=/home/admin/jstatd.java.policy -J-Djava.rmi.server.logCalls=true
1.3、 同时需要执行一个命令看看(linux需要)
Hostname –i
如果显示是127.0.0.1,则需要修改/etc/hosts文件,去掉对本机名的配置,让本机名解析到它的IP地址,如10.20.131.214
2、 做完步骤1,那可以说是万事具备了,很多问题都解决了,接下来在本地先看看远程机器上启动了多少个java进程
[appdeploy@cnsz22vl2175 ~]$ jps rmi:10.202.37.75
92144 start.jar
18883 start.jar
81301 start.jar
24091 Jps
18541 start.jar
21550 Jstatd
可以看到这台机器上启动了多个java程序,一个是第一步我们启动的jstatd,其它为业务进程。

在客户端侧执行

3、  看看heap的使用情况吧

C:\Users\01107252>jstat -gcutil 18883@10.202.37.75:1099 1000 1000
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0.00 0.00 4.38 5.95 97.57 95.44 19 0.672 5 0.874 1.545
0.00 0.00 4.38 5.95 97.57 95.44 19 0.672 5 0.874 1.545
0.00 0.00 4.38 5.95 97.57 95.44 19 0.672 5 0.874 1.545
0.00 0.00 4.38 5.95 97.57 95.44 19 0.672 5 0.874 1.545
0.00 0.00 4.38 5.95 97.57 95.44 19 0.672 5 0.874 1.545
0.00 0.00 4.38 5.95 97.57 95.44 19 0.672 5 0.874 1.545

更多示例 :
(1)使用内部RMI Registry
jstatd -J-Djava.security.policy=all.policy  (默认端口为1099) 
(2)使用外部RMI Registry
a)使用默认值
rmiregistry&
jstatd -J-Djava.security.policy=all.policy
b)使用2020端口
rmiregistry 2020&
jstatd -J-Djava.security.policy=all.policy -p 2020 
c)使用2020端口,使用rminame
rmiregistry 2020&
jstatd -J-Djava.security.policy=all.policy -p 2020 -n AlternateJstatdServerName
(3)RMI Registry已经启动,不创建内部RMI Registry
jstatd -J-Djava.security.policy=all.policy -nr
(4)RMI日志能力
jstatd -J-Djava.security.policy=all.policy -J-Djava.rmi.server.logCalls=true

原文地址:https://www.cnblogs.com/duanxz/p/2738831.html