标签: jstatd

jvisualvm连接到远程jstatd没有显示应用程序

jstatd在远程服务器上启动了一个(Ubuntu Server 14.04):

jstatd -J-Djava.security.policy=.jstatd.all.policy -J-Djava.rmi.server.logCalltrue -p 9099
Run Code Online (Sandbox Code Playgroud)

并尝试在Windows上使用jvisualvm连接到它.我检查了netstat,建立了连接,并在遥控器上记录了呼叫:

Sep 11, 2015 12:48:51 PM sun.rmi.server.UnicastServerRef logCall
FINER: RMI TCP Connection(4)-10.82.199.0: [10.82.199.0: sun.rmi.registry.RegistryImpl[0:0:0, 0]: java.rmi.Remote lookup(java.lang.String)]
Sep 11, 2015 12:48:55 PM sun.rmi.server.UnicastServerRef logCall
FINER: RMI TCP Connection(4)-10.82.199.0: [10.82.199.0: sun.rmi.registry.RegistryImpl[0:0:0, 0]: java.rmi.Remote lookup(java.lang.String)]
Sep 11, 2015 12:48:59 PM sun.rmi.server.UnicastServerRef logCall
FINER: RMI TCP Connection(4)-10.82.199.0: [10.82.199.0: sun.rmi.registry.RegistryImpl[0:0:0, 0]: java.rmi.Remote lookup(java.lang.String)]
Run Code Online (Sandbox Code Playgroud)

所有迹象都表明它正在发挥作用.但是jvisualvm中没有应用程序显示:

在此输入图像描述

在此输入图像描述

java jvm jvisualvm jstatd

10
推荐指数
1
解决办法
7574
查看次数

在Java 9+中启动jstatd

在过去,我已经通过安全策略文件启动了jstatd,如下所示:https: //stackoverflow.com/a/14930180/1294116

但是,在Java 9+中,他们已经删除了该tools.jar文件,这意味着此解决方案不再有效.有谁知道怎么解决这个问题?(目前我回来收到错误java.security.AccessControlException: access denied ("java.util.PropertyPermission" "java.rmi.server.ignoreSubClasses" "write") ...)

java jstatd java-9

9
推荐指数
1
解决办法
767
查看次数

VisualVM 显示“此 JVM 不支持”

我正在尝试使用 VisualVM 1.4 分析远程 JVM。我在本地运行 macOS High Sierra 10.13.6,具有以下 OpenJDK 版本:

java -version
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_181-b13)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.181-b13, mixed mode)
Run Code Online (Sandbox Code Playgroud)

服务器运行带有以下 OpenJDK 的 Debian Stretch:

java -version
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-8u181-b13-2~deb9u1-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)
Run Code Online (Sandbox Code Playgroud)

当我在本地监视 JVM 进程时,我会看到所有这些选项卡,并且分析工作正常。

在此输入图像描述

但是,如果我远程执行此操作,我会看到如下内容:

在此输入图像描述

请注意显示“此 JVM 不支持”的 CPU 窗口和减少的选项卡,不包括“Profiler”。然而,正如你所看到的,我确实看到了一些数据。

我正在通过 进行连接jstatd。在服务器上,按照本文,我正在运行

jstatd -J-Djava.security.policy=/home/brandwatch/jstatd.all.policy -J-Djava.rmi.server.hostname=10.2.156.160 -Djava.rmi.server.logCalltrue
Run Code Online (Sandbox Code Playgroud)

像这样的答案表明这可能是由于不同的 JVM 版本造成的,但是,我的似乎是相同的,尽管其中一个运行在 MacOS 上,另一个运行在 Debian …

java profiling visualvm jstatd

6
推荐指数
1
解决办法
6373
查看次数

无法使用所有访问策略启动 jstatd

我试图在我的服务器上启动 jstatd 但我不断收到此错误:

[ec2-user@ip-204-95-69 bin]$ sudo jstatd -J-Djava.security.policy=/home/ec2-user/logstash-5.2.0/bin/jstatd.all.policy 
java.security.policy: error adding Entry:
    java.net.MalformedURLException: no protocol: /usr/java/jdk1.8.0_92/lib/tools.jar
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:472)
    at java.security.AccessController.checkPermission(AccessController.java:884)
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
    at java.lang.System.setProperty(System.java:792)
    at sun.tools.jstatd.Jstatd.main(Jstatd.java:139)
[ec2-user@ip-204-95-69 bin]$ 
Run Code Online (Sandbox Code Playgroud)

我已将策略文件设置为如下所示:

grant codebase "/usr/java/jdk1.8.0_92/lib/tools.jar" { permission java.security.AllPermission; };
Run Code Online (Sandbox Code Playgroud)

我还需要设置什么才能让它启动?我试过了sudo但这也不起作用。

现在如果我运行它而不-J这样......jstatd -p 9050 -Djava.security.policy=/homejstatd.all.policy -Djava.rmi.server.hostname=ip-address

我不断地把这个找回来...

[ec2-user@ip-204-95-69 bin]$ jstatd -p 9050 -Djava.security.policy=/home/ec2-user/logstash-5.2.0/bin/jstatd.all.policy -Djava.rmi.server.hostname=ip-address
usage: jstatd [-nr] [-p port] [-n rminame]
Run Code Online (Sandbox Code Playgroud)

java jstatd

5
推荐指数
0
解决办法
1367
查看次数

通过jstatd查看MBean

我试图通过jstatd监视服务器上运行的所有Java进程.我已经设置足够的,我可以连接VisualVM并查看所有正在运行的进程.大多数显示器工作正常,但某些事情(尤其是CPU使用率和MBean)不会显示.相反,它说:

MBeans浏览器

数据不可用,因为无法建立与JMX代理的JMX连接.

我认为问题是应用程序必须通过jstatdRMI注册表而不是本地注册表"宣布" ,所以我尝试了以下(根据这些建议),但它仍然不会显示.我尝试的代码如下:

public class JmxRmiConnectorTest {
    public static void main(String[] args) throws Exception {
        Registry rmiRegistry = LocateRegistry.createRegistry(9994);
        String svc =
            "service:jmx:rmi://localhost:9994/jndi/rmi://localhost:1099/connector";

        MBeanServer mbeanServer = ManagementFactory.getPlatformMBeanServer();

        JMXServiceURL url = new JMXServiceURL(svc);
        RMIConnectorServer rmiServer = new RMIConnectorServer(url, null, mbeanServer);
        rmiServer.start();

        Thread.sleep(100000);

        rmiServer.stop();
    }
}
Run Code Online (Sandbox Code Playgroud)

当通过jstatd查看时,如何让我的MBean和CPU使用率显示在VisualVM中?

java jmx visualvm jstatd

3
推荐指数
1
解决办法
4120
查看次数

无法在ubuntu服务器上启动jstatd

我想设置两个运行jstatd的服务器,这样我就可以动态监控我的应用程序.Web服务器已经启动并运行,但是另一台服务器总是会遇到这样的例外情况.

无法将/ JStatRemoteHost绑定到RMI注册表java.rmi.ServerException:服务器线程中发生了RemoteException; 嵌套异常是:java.rmi.UnmarshalException:错误解组参数; 嵌套的例外是:抛出java.lang.ClassNotFoundException:sun.jvmstat.monitor.remote.RemoteHost(无安全管理器:RMI类装载器禁用)在sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:419)在sun.rmi .server.UnicastServerRef.dispatch(UnicastServerRef.java:267)at sun.rmi.transport.Transport $ 1.run(Transport.java:177)at sun.rmi.transport.Transport $ 1.run(Transport.java:174)at at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java)中的sun.rmi.transport.Transport.serviceCall(Transport.java:173)中的java.security.AccessController.doPrivileged(Native Method)java:143)引起:java.rmi.UnmarshalException:错误解组参数; 嵌套异常是:java.lang.ClassNotFoundException:sun.rmi.reg中的sun.rmi.registry.RegistryImpl_Skel.dispatch(未知源)sun.jvmstat.monitor.remote.RemoteHost(没有安全管理器:RMI类加载器被禁用).位于sun.rmi的sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:267)的sunastServerRef.oldDispatch(UnicastServerRef.java:409)位于sun.rmi的sun.rmi.transport.Transport $ 1.run(Transport.java:177). transport.Transport $ 1.run(Transport.java:174)位于sun.rmi.transport.tcp的sun.rmi.transport.Transport.serviceCall(Transport.java:173)的java.security.AccessController.doPrivileged(Native Method) .TCPTransport.handleMessages(TCPTransport.java:553)at sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler.

我确定jstatd加载了内容为的策略文件

grant codebase"file:$ {java.home} /../ lib/tools.jar"{permission java.security.AllPermission; };

我无法想象问题是什么来的,请帮忙.

rmiregistry jstatd

1
推荐指数
1
解决办法
6192
查看次数

标签 统计

jstatd ×6

java ×5

visualvm ×2

java-9 ×1

jmx ×1

jvisualvm ×1

jvm ×1

profiling ×1

rmiregistry ×1