我正在使用JBoss运行客户端/服务器应用程序。访问远程MBean服务器
如何连接到服务器JVM的MBeanServer?我想使用MemoryMX MBean来跟踪内存消耗。
我可以使用JNDI查找连接到JBoss MBeanServer,但java.lang.MemoryMX MBean未注册到JBoss MBeanServer。
编辑:需求是编程访问从客户端的内存使用情况。
我正在使用JBoss运行客户端/服务器应用程序。访问远程MBean服务器
如何连接到服务器JVM的MBeanServer?我想使用MemoryMX MBean来跟踪内存消耗。
我可以使用JNDI查找连接到JBoss MBeanServer,但java.lang.MemoryMX MBean未注册到JBoss MBeanServer。
编辑:需求是编程访问从客户端的内存使用情况。
与JBoss服务器的MBeanServer,JVM的MBean服务器不默认允许远程监控。您需要设置不同的系统属性,以允许:
http://java.sun.com/javase/6/docs/technotes/guides/management/agent.html
您是否尝试启动JConsole
(即$JAVA_HOME/bin
)与服务器连接?您应该能够从那里
一个代码示例查看内存统计从IBM文章:link
MBeanServerConnection serverConn;
try {
//connect to a remote VM using JMX RMI
JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://<addr>");
JMXConnector jmxConnector = JMXConnectorFactory.connect(url);
serverConn = jmxConnector.getMBeanServerConnection();
ObjectName objName = new
ObjectName(ManagementFactory.RUNTIME_MXBEAN_NAME);
// Get standard attribute "VmVendor"
String vendor =
(String) serverConn.getAttribute(objName, "VmVendor");
} catch (...) { }
我写了一个类是这样的:
import javax.management.remote.JMXServiceURL;
import javax.management.MBeanAttributeInfo;
import javax.management.MBeanInfo;
import javax.management.MBeanServerConnection;
import javax.management.ObjectName;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
public class JVMRuntimeClient
{
static void main(String[] args) throws Exception
{
if (args == null)
{
System.out.println("Usage: java JVMRuntimeClient HOST PORT");
}
if(args.length < 2)
{
System.out.println("Usage: java JVMRuntimeClient HOST PORT");
}
try
{
JMXServiceURL target = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://"+args[0]+":"+args[1]+"/jmxrmi");
JMXConnector connector = JMXConnectorFactory.connect(target);
MBeanServerConnection remote = connector.getMBeanServerConnection();
/**
* this is the part where you MUST know which MBean to get
* com.digitalscripter.search.statistics:name=requestStatistics,type=RequestStatistics
* YOURS WILL VARY!
*/
ObjectName bean = new ObjectName("com.digitalscripter.search.statistics:name=requestStatistics,type=RequestStatistics");
MBeanInfo info = remote.getMBeanInfo(bean);
MBeanAttributeInfo[] attributes = info.getAttributes();
for (MBeanAttributeInfo attr : attributes)
{
System.out.println(attr.getDescription() + " " + remote.getAttribute(bean,attr.getName()));
}
connector.close();
}
catch(Exception e)
{
System.out.println(e.getMessage());
System.exit(0);
}
}
}
只需要解决JMX服务URL *我的问题 - 谢谢! – 2013-03-22 17:10:55
没错,就是工作。但我想从我的客户端应用程序进行编程访问。我的客户端可以连接到JBoss MBean服务器,但我不知道如何连接到平台MBean服务器。 – parkr 2009-08-13 07:00:07
道歉 - 从您的问题中不清楚,程序访问是一项要求 – 2009-08-13 07:26:44
我的歉意:) – parkr 2009-08-13 07:47:58