【问题标题】:Calling JBoss MBean functions to get threaddump调用 JBoss MBean 函数获取 threaddump
【发布时间】:2011-08-29 12:31:45
【问题描述】:
一个应用程序正在使用 JBoss 4.2.2,我发现有必要调用 listThreadDump(),我希望它在 ServerInfo 中。
我认为我需要找到此信息的 jar 是 jboss-jmx.jar。
那么,我如何通过调用类似于http://localhost:8080/jmx-console/HtmlAdaptor?action=invokeOpByName&name=jboss.system:type=ServerInfo&methodName=listThreadDump 的方式以编程方式复制所做的事情?
【问题讨论】:
标签:
jmx
jdk1.5
mbeans
jboss-4.2.x
【解决方案1】:
这就是我访问 ServerInfo MBean 的方式。我用的是JBoss AS 5.1,不过这个方法应该是一样的。
要调用listThreadDump(),您可以使用MBeanServer 实例ServerInfo MBean 上的方法invoke()。
此外,您可以使用相同的 MBeanServer 访问 MBean 的属性。
示例代码:
// imports
import javax.management.MBeanServer;
import javax.management.ObjectName;
import org.jboss.mx.util.MBeanServerLocator;
try {
MBeanServer server = MBeanServerLocator.locate();
ObjectName name = new ObjectName("jboss.system:type=ServerInfo");
// invoke the listThreadDump method and capture its output
String threadDumpHtml = (String) server.invoke(name, "listThreadDump", null, null);
// access a simple attribute of the ServerInfo object
String jvmName = (String) server.getAttribute(name, "JavaVMName");
} catch (Exception e) {
// Ideally catch the 3 exact exceptions
}
最后,当 MBean 公开一个“实例”属性时,我发现它很方便,因此您可以直接访问对象(CastToType) server.getAttribute(name, "instance"),而不是总是通过 MBeanServer。例如,在使用 JMS 时,ServerPeer 实例很不错,因为您可以在队列和主题订阅者上获取消息计数器。