我想通过jstatd监视服务器上运行的所有Java进程。我已经设置了足够的设置,以便可以与VisualVM连接并查看所有正在运行的进程。大多数显示器工作正常,但某些事情(特别是CPU使用率和MBean)不显示。相反,它说:通过jstatd查看MBeans
的MBean浏览器
数据不可用,因为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();
}
}
我怎样才能让我的MBean和CPU使用率,当通过jstatd看到VisualVM的显示?
查看我发布的代码,我通过上面的RMIConnectorServer导出JMX。所以我认为这一部分已经涵盖。但是,VisualVM并没有像你所描述的那样自动获取连接,而是试图找出错误的具体位置。谢谢。 – 2012-02-20 21:42:34
我不认为这会奏效。 VisualVM可以通过jvmstat检测JMX连接,因为它可以访问(通过jvmstat)被监视进程的命令行参数。请使用我上面概述的过程。设置几个命令行参数比向应用程序添加特殊代码要容易得多。 – 2012-02-21 11:54:18
谢谢,这是关键 - VisualVM通过解析命令行参数来计算出如何连接。这很愚蠢。我们有一个自定义导出器,因为我们想绑定到一个特定的网络接口(一个10.x网络而不是公共IP)来减少攻击向量。有没有办法让它与定制出口商合作? – 2012-02-22 23:14:00