jstatd jvisualvm 远程监控jvm


(1)【服务器端配置】

在catalina.sh里添加

JAVA_OPTS="$JAVA_OPTS
-Djava.rmi.server.hostname=192.168.1.190
-Dcom.sun.management.jmxremote.port=8950
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false"

(2)jstatd [options]
此命令是一个RMI Server应用程序,提供了对JVM的创建和结束监视,也为远程监视工具提供了一个可以attach的接口

options
-nr 当一个存在的RMI Registry没有找到时,不尝试创建一个内部的RMI Registry
-p port 端口号,默认为1099
-n rminame 默认为JStatRemoteHost;如果多个jstatd服务开始在同一台主机上,rminame唯一确定一个jstatd服务
-J jvm选项

jstatd
会报如下错误:
Could not create remote object
access denied (java.util.PropertyPermission java.rmi.server.ignoreSubClasses write)
java.security.AccessControlException: access denied (java.util.PropertyPermission java.rmi.server.ignoreSubClasses write)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:323)
at java.security.AccessController.checkPermission(AccessController.java:546)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
at java.lang.System.setProperty(System.java:727)
at sun.tools.jstatd.Jstatd.main(Jstatd.java:122)

这是因为没有给jstatd指定安全策略

创建安全策略文件,并命名为jstatd.all.policy
grant codebase "file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};

注:${java.home} 被识别为当前jstatd的目录,即使系统指定JAVA_HOME,$JAVA_HOME也不能被识别。。。或者直接使用绝对路径。jstatd.all.policy可以放在任何位置,运行时需要指定绝对路径。

再次启动(默认端口1099)
jstatd -J-Djava.security.policy=jstatd.all.policy

(jstatd -J-Djava.security.policy=jstatd.all.policy & 可以后台运行)

就可以通过jvisualvm连接了。注 同时需要执行一个命令查看本机对外ip(linux需要)Hostname –i

如果显示是127.0.0.1或者其他ip,与对外ip不同,则需要修改/etc/hosts文件,去掉对本机名的配置,让本机名解析到它的IP地址,如10.20.131.214。(或者在启动的时候使用jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=10.20.131.214 & 不需要修改hosts文件,因为修改此文件还可能影响到其他程序。 )

然后在jvisualvm中通过Add Remote Host添加10.20.131.214来访问

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

 

猜你喜欢

转载自www.cnblogs.com/liuys635/p/12531047.html
今日推荐