tomcat - 远程调用在 tomcat 上运行的 MBean 操作

标签 tomcat rmi jmx

我编写了一个 MBean 来获取所有正在运行的线程的某些属性。在 Tomcat 上运行它。

..
public String dumpThreads() {

        ThreadMXBean threadMX = ManagementFactory.getThreadMXBean();
        long[] allThreadIDs = threadMX.getAllThreadIds();
        ThreadInfo[] threadsInfo = threadMX.getThreadInfo(allThreadIDs, 10);
        StringBuilder threadDumpSB = new StringBuilder();

        threadDumpSB.append ("THREAD DUMP - " + (new SimpleDateFormat ("dd-MMM-yyyy HH:mm:ss")).format(new Date()) );
        threadDumpSB.append ("\n\n");
        threadDumpSB.append ("Thread count: " + Integer.toString(threadsInfo.length) );
        threadDumpSB.append ("\n\n\n");

        for (ThreadInfo threadInfo : threadsInfo) {
            threadDumpSB.append ("ID: " + Long.toString(threadInfo.getThreadId()) + "\n");
            threadDumpSB.append ("Name: " + threadInfo.getThreadName() + "\n");
            threadDumpSB.append ("State: " + threadInfo.getThreadState() + "\n");
            StackTraceElement[] stacktraceElements = threadInfo.getStackTrace();
            for (StackTraceElement stElm : stacktraceElements) 
                threadDumpSB.append ("    at " + stElm.toString() + "\n");
            threadDumpSB.append ("\n");
        }

        return (threadDumpSB.toString());

    }
..

我可以通过 jconsole 看到这个:Application>Server>Server>Operations 也可以通过 http://servername:8080/manager/jmxproxy

Name: Application:Name=Server,Type=Server
modelerType: org.puneet.mbeans.Server
Uptime: 3156547

现在,我想远程执行 dumpThreads() 方法。

这是我到目前为止去过的地方:

JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:8008/jmxrmi");
JMXConnector jmxc = JMXConnectorFactory.connect(url, null);
MBeanServerConnection mbsc = jmxc.getMBeanServerConnection();

我能够连接到服务器并获取 mbean 列表等。不确定如何获取我的 mbean 的句柄然后调用 dumpThreads() 操作。

ObjectName mbeanName = new ObjectName("Application:Name=Server,Type=Server"); ...?

提前致谢。

普尼特

最佳答案

想通了!

...
MBeanServerConnection mbsc = jmxc.getMBeanServerConnection();
...
ObjectName mbeanName = new ObjectName("Application:Name=Server,Type=Server");
Object o = mbsc.invoke(mbeanName, "dumpThreads", null, null);
System.out.println(o);
...

关于tomcat - 远程调用在 tomcat 上运行的 MBean 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26542464/

相关文章:

tomcat - RabbitMq 限制和集群

java - Tomcat 能否为 HTTPS 请求提供单独的(或仅 HTTPS) session ?

spring - Weblogic,Spring 找不到 bean

java - 如何更改在项目中创建文件的文件夹?

Java RMI 错误 : Connection Reset

Java RMI : Rejecting requests when saturation is reached

多台机器上的 Java RMI 注册表对象管理

java - Spring JMX。通过XML设置@ManagedAtrribute的默认值

java - 无法将 JMX 与 Spring 应用程序集成

java - 无法在 Tomcat 中连接 jmxmp