通过jstatd查看MBean

时间:2012-02-16 21:52:55

标签: java jmx visualvm jstatd

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

  

MBeans浏览器

     

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

我认为问题是应用程序必须通过jstatd RMI注册表而不是本地注册表“宣布”,所以我尝试了以下(these suggestions),但它仍然赢了“显示。我尝试的代码如下:

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中?

2 个答案:

答案 0 :(得分:9)

jstatd与JMX无关。 Jstatd是Jvmstat的代理。要获得MBean和CPU使用率,您还需要启用JMX。有关详细信息,请参阅JMX Remote Monitoring and Management。一旦启用了JMX,VisualVM将自动检测(通过jvmstat)它也可以使用JMX,它将在一个地方显示来自jvmstat和JMX的数据。

答案 1 :(得分:0)

在remote中,像这样启动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