祝大家美好的一天。
我想使用 jstatd 来监控 JVM、GC、堆和远程机器中运行的一些应用程序的一些重要指标。
当我尝试通过命令行从java路径的bin文件夹中执行命令jstatd.exe
时,出现以下错误:
C:Program Files (x86)Javajdk1.6.0_38bin>jstatd.exe
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(AccessControlConte
xt.java:374)
at java.security.AccessController.checkPermission(AccessController.java:
549)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
at java.lang.System.setProperty(System.java:725)
at sun.tools.jstatd.Jstatd.main(Jstatd.java:122).
当我们在互联网上检查此错误时,我们知道,我们必须添加一些链接中提到的安全文件由于权限错误,无法启动 JSTATD。但是,我们仍然遇到同样的错误。
任何人都可以帮助我们。
提前谢谢。
使用 cmd 通过"java -version"检查您的 Java 版本就我而言,我的java版本是1.7,所以它不起作用。如果这是问题所在,请使用正确的版本更新策略文件,如下所示:
grant codebase "file:C:/Program Files/Java/jdk1.7.0_51/lib/tools.jar" {
permission java.security.AllPermission;
};
现在像下面这样运行 jstatd
C:Program FilesJavajdk1.7.0_51bin>jstatd -p 1234 J-Djava.security.policy=D:
jstatd.all.policy
希望它会起作用!
注意:尝试使用此端口[1234]从visualVM连接您的远程主机,否则它将不起作用。
编辑:
对于 jdk 1.6
策略文件:
grant codebase "file:C:/Program Files/Java/jdk1.6.0_45/lib/tools.jar" {
permission java.security.AllPermission;
};
jstatd 命令:
C:Program FilesJavajdk1.6.0_45bin>jstatd J-Djava.security.policy=D:/jstatd.
all.policy -p 1234