1

祝大家有美好的一天。

我想使用 jstatd 来监控 JVM、GC、Heap 和一些在远程机器上运行的应用程序的一些重要指标。

当我尝试jstatd.exe通过命令行从 java 路径的 bin 文件夹执行命令时,出现以下错误:

C:\Program Files (x86)\Java\jdk1.6.0_38\bin>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 由于权限错误。但是,我们仍然遇到同样的错误。

任何人都可以帮助我们解决这个问题。

提前致谢。

4

1 回答 1

0

使用 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 Files\Java\jdk1.7.0_51\bin>jstatd -p 1234 J-Djava.security.policy=D:
\jstatd.all.policy

希望它会奏效!

NB 尝试使用此端口 [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 Files\Java\jdk1.6.0_45\bin>jstatd J-Djava.security.policy=D:/jstatd.
all.policy -p 1234
于 2015-06-03T07:22:50.893 回答