3

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

MBean 浏览器

数据不可用,因为无法建立与 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();
    }
}

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

4

3 回答 3

9

jstatd 与 JMX 无关。Jstatd 是 Jvmstat 的代理。要获得 MBean 和 CPU 使用率,您还需要启用 JMX。有关更多详细信息,请参阅JMX 远程监视和管理。启用 JMX 后,VisualVM 将自动检测(通过 jvmstat)它也可以使用 JMX,并将在一个地方同时显示来自 jvmstat 和 JMX 的数据。

于 2012-02-20T13:56:06.917 回答
0

在远程,像这样启动 java 以启用 jmxremote。

java -Dcom.sun.management.jmxremote \
     -Dcom.sun.management.jmxremote.port=9191 \
     -Dcom.sun.management.jmxremote.authenticate=false \
     -Dcom.sun.management.jmxremote.ssl=false \
     -Djava.rmi.server.hostname=`hostname` \
     -jar app.jar

在语言环境中,像这样使用 jps jps YOUHOSTNAME:9191

于 2014-08-03T10:42:32.097 回答
0

只适合那些需要快速工作方法的人。JMX 可以动态启动/停止,无需重启 JVM。在我的情况下,动态启动 jmx 并重新启动 jvisualvm 后,JMX 和 cpu 使用工作正常。

jcmd PID ManagementAgent.start jmxremote.port=9999 jmxremote.ssl=false jmxremote.authenticate=false

或者

jcmd PID ManagementAgent.stop
于 2022-02-08T03:07:16.850 回答