我们使用类似下面的内容以编程方式连接到我们的JMX服务器。
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.port=1234
-Dcom.sun.management.jmxremote.ssl=false
绑定到特定的地址,您需要添加以下VM参数:你应该像下面的参数运行服务器
-Djava.rmi.server.hostname=A.B.C.D
然后你就可以连接到服务器使用JMX客户端代码如下所示:
String host = "localhost"; // or some A.B.C.D
int port = 1234;
String url = "service:jmx:rmi:///jndi/rmi://" + host + ":" + port + "/jmxrmi";
JMXServiceURL serviceUrl = new JMXServiceURL(url);
JMXConnector jmxConnector = JMXConnectorFactory.connect(serviceUrl, null);
try {
MBeanServerConnection mbeanConn = jmxConnector.getMBeanServerConnection();
// now query to get the beans or whatever
Set<ObjectName> beanSet = mbeanConn.queryNames(null, null);
...
} finally {
jmxConnector.close();
}
我们也有代码,可以编程方式发布自己的VM参数之外的特定端口,但是这更多福比你想象的要多。
就连接“通过pid”而言,就我所知,您需要使用Java6来完成它。我没有使用下面的代码,但它似乎工作。
List<VirtualMachineDescriptor> vms = VirtualMachine.list();
for (VirtualMachineDescriptor desc : vms) {
VirtualMachine vm;
try {
vm = VirtualMachine.attach(desc);
} catch (AttachNotSupportedException e) {
continue;
}
Properties props = vm.getAgentProperties();
String connectorAddress =
props.getProperty("com.sun.management.jmxremote.localConnectorAddress");
if (connectorAddress == null) {
continue;
}
JMXServiceURL url = new JMXServiceURL(connectorAddress);
JMXConnector connector = JMXConnectorFactory.connect(url);
try {
MBeanServerConnection mbeanConn = connector.getMBeanServerConnection();
Set<ObjectName> beanSet = mbeanConn.queryNames(null, null);
...
} finally {
jmxConnector.close();
}
}
我也的SimpleJMX package笔者这使得它易于启动JMX服务器并发布豆到远程客户端。
// create a new server listening on port 8000
JmxServer jmxServer = new JmxServer(8000);
// start our server
jmxServer.start();
// register our lookupCache object defined below
jmxServer.register(lookupCache);
jmxServer.register(someOtherObject);
// stop our server
jmxServer.stop();
它确实有一个客户端的界面很好,但现在它没有任何机制来查找PID过程 - 只有主机/端口组合的支持(在6/2012)。
两个主程序和JMX客户端是独立程序(Java SE)。 – mjafari 2011-04-05 14:02:07
另请参阅http://www.pongasoft.com/blog/yan/entry/connecting_to_a_local_vm/ – 2012-03-07 18:27:40