jmx - 调用 JBoss MBean 函数来获取 threaddump

标签 jmx java-5 mbeans jboss-4.2.x

应用程序正在使用 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(),您可以使用 MBeanServerInvoke() 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/

相关文章:

java - 在JDK 1.6上开发webservice客户端,需要兼容JDK 1.5.03

java - 通过 jConsole/JMX 的 Activemq Artemis

spring - 如何在 Websphere ND 8.5 中运行 Spring Batch 管理

java - Jmx 客户端抛出 InstanceNotFoundException

java - Tomcat 监控 - connectionCount JMX mbean

java - 如何仅将特定数据库用于托管操作

java - MBean 的 SNMP 监控(snmp-adaptor.sar 中的 attributes.xml)(JBoss)

tomcat - 如何从 2 个 Tomcat 内访问同一个 JMX MBean 服务器

generics - public static <T> T addAndReturn(T element, Collection<T> collection){ 中的 <T> 有什么用

java - 非技术决策者(在客户端)升级到 Java 6 的原因和优势