应用程序正在使用 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
?
最佳答案
这就是我访问 ServerInfo MBean 的方式。我使用的是JBoss AS 5.1,但是这个方法应该是一样的。
要调用 listThreadDump()
,您可以使用 MBeanServer
Invoke()
ServerInfo
MBean 上的方法> 实例。
此外,您可以使用同一 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 实例,因为您可以获取队列和主题订阅者上的消息计数器。
关于jmx - 调用 JBoss MBean 函数来获取 threaddump,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7230104/