我尝试在linux机器上运行jstatd jvm监控工具
jboss@hostAddr:/usr/java/jdk1.6.0_18/bin> uname -a
Linux hostAddr 2.6.16.60-0.34-smp #1 SMP Fri Jan 16 14:59:01 UTC 2009 x86_64 x86_64 x86_64 GNU/Linux
使用以下命令:
jstatd -J-Djava.security.policy=~/jstatd.all.policy
jstatd.all.policy内容
grant codebase "file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};
不幸的是,我得到了以下输出:
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:725)
at sun.tools.jstatd.Jstatd.main(Jstatd.java:122)
由于某些原因,jstatd使用相同的命令和策略文件在windows上成功运行。
Linux java版本:
java version "1.6.0_18"
Java(TM) SE Runtime Environment (build 1.6.0_18-b07)
Java HotSpot(TM) 64-Bit Server VM (build 16.0-b13, mixed mode)
Windows java版本:
java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02, mixed mode)
发布于 2013-03-02 23:29:00
刚刚找到了下面的脚本来运行jstatd
。我设法用这个脚本https://gist.github.com/nicerobot/1375032运行了jstatd
#!/bin/sh
policy=${HOME}/.jstatd.all.policy
[ -r ${policy} ] || cat >${policy} <<'POLICY'
grant codebase "file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};
POLICY
jstatd -J-Djava.security.policy=${policy} &
发布于 2012-06-01 00:30:00
你指定的路径是错误的吗(我是)?
尝试将策略放在/tmp/jstatd.all.policy中,然后运行:
jstatd -J-Djava.security.policy=/tmp/jstatd.all.policy
发布于 2019-12-22 10:20:20
如果你使用的是Java11,你需要查看这个答案:Starting jstatd in Java 9+ - Stack Overflow
策略文件如下所示:
grant codebase "jrt:/jdk.jstatd" {
permission java.security.AllPermission;
};
https://stackoverflow.com/questions/9939883
复制相似问题