调用 JBoss MBean 函数来获取 threaddump

发布于 2024-12-01 16:17:15 字数 343 浏览 3 评论 0原文

一个应用程序正在使用 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< 的内容来完成的操作/代码>?

An application is using JBoss 4.2.2, and I have found it necessary to call listThreadDump(), and I expect it is in ServerInfo.

I am thinking the jar I need to find this information is jboss-jmx.jar.

So, how do I programmatically duplicate what is done by calling something similar to http://localhost:8080/jmx-console/HtmlAdaptor?action=invokeOpByName&name=jboss.system:type=ServerInfo&methodName=listThreadDump?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

半世蒼涼 2024-12-08 16:17:15

这就是我访问 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 实例,因为您可以获取队列和主题订阅者上的消息计数器。

This is how I have accessed the ServerInfo MBean. I'm using JBoss AS 5.1, but this method should be the same.

To call listThreadDump(), you can invoke() the method on the ServerInfo MBean using an MBeanServer instance.

Additionally, you can access attributes of MBeans using the same MBeanServer.

Sample code:

// 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
}

Finally, I find it handy when MBeans expose an 'instance' attribute, so you can then access the object directly (CastToType) server.getAttribute(name, "instance") instead of always going through the MBeanServer. For example, when using JMS, the ServerPeer instance is nice to have as you can get message counters on your queues and topic subscribers.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文