Java 如何使用JMX访问远程JVM的线程?
我如何使用JMX访问远程JVM的线程?为什么不使用它,因为它是SDK的一部分,可以让您访问给定JVM中的线程以及其他内容 尝试复制已经存在的调试功能毫无意义。为什么不使用它,因为它是SDK的一部分,可以让您访问给定JVM中的线程以及其他内容Java 如何使用JMX访问远程JVM的线程?,java,jmx,Java,Jmx,我如何使用JMX访问远程JVM的线程?为什么不使用它,因为它是SDK的一部分,可以让您访问给定JVM中的线程以及其他内容 尝试复制已经存在的调试功能毫无意义。为什么不使用它,因为它是SDK的一部分,可以让您访问给定JVM中的线程以及其他内容 尝试复制已经存在的调试功能是没有意义的。这是一个非常古老的线程,但是由于我在寻找并找到了这个问题的实际答案,我不妨发布它 上面展示了一个关于如何访问远程JMX上所有线程的非常好的示例 在大纲中: // First connect to the remote
尝试复制已经存在的调试功能是没有意义的。这是一个非常古老的线程,但是由于我在寻找并找到了这个问题的实际答案,我不妨发布它 上面展示了一个关于如何访问远程JMX上所有线程的非常好的示例 在大纲中:
// First connect to the remote service
String urlPath = "/jndi/rmi://" + hostname + ":" + port + "/jmxrmi";
JMXServiceURL url = new JMXServiceURL("rmi", "", 0, urlPath);
JMXConnector jmxc = JMXConnectorFactory.connect(url);
MBeanServerConnection server = jmxc.getMBeanServerConnection();
// Then get all threads
ThreadMXBean tmbean = newPlatformMXBeanProxy(server, THREAD_MXBEAN_NAME, ThreadMXBean.class);
ObjectName tmbean = new ObjectName(THREAD_MXBEAN_NAME);
long[] tids = tmbean.getAllThreadIds();
ThreadInfo[] tinfos = tmbean.getThreadInfo(tids, Integer.MAX_VALUE);
for (ThreadInfo ti : tinfos) {
// do something with this particular thread...
}
强调可能需要像@aaron mciver所质疑的那样编写自己的监控工具;线程包含很多信息,在一个业务流程中可能有很多线程,例如,在VisualVM中用眼珠观察它们可能是不可能的。
以编程方式在线程中循环以查找特定关键字、CPU时间、堆栈跟踪、涉及的文件名等非常有意义。这是一个非常古老的线程,但由于我正在查找并找到了这个问题的实际答案,我不妨发布它 上面展示了一个关于如何访问远程JMX上所有线程的非常好的示例 在大纲中:
// First connect to the remote service
String urlPath = "/jndi/rmi://" + hostname + ":" + port + "/jmxrmi";
JMXServiceURL url = new JMXServiceURL("rmi", "", 0, urlPath);
JMXConnector jmxc = JMXConnectorFactory.connect(url);
MBeanServerConnection server = jmxc.getMBeanServerConnection();
// Then get all threads
ThreadMXBean tmbean = newPlatformMXBeanProxy(server, THREAD_MXBEAN_NAME, ThreadMXBean.class);
ObjectName tmbean = new ObjectName(THREAD_MXBEAN_NAME);
long[] tids = tmbean.getAllThreadIds();
ThreadInfo[] tinfos = tmbean.getThreadInfo(tids, Integer.MAX_VALUE);
for (ThreadInfo ti : tinfos) {
// do something with this particular thread...
}
强调可能需要像@aaron mciver所质疑的那样编写自己的监控工具;线程包含很多信息,在一个业务流程中可能有很多线程,例如,在VisualVM中用眼珠观察它们可能是不可能的。
以编程方式循环线程以查找特定关键字、CPU时间、堆栈跟踪、,涉及的文件名等。如何在无头环境中运行visualVM?您可以使用jvisualvm远程监控应用程序…不确定您正在寻找什么细节,或者这是否是一个已加载的问题,还有待解决…我的观点是,如果您可以利用jvisualvm或jconsole提供的内容,那么就这样做;不要创建JMX钩子来传播已经可用的信息。啊,我不知道。我如何从Java代码中调用VisualVM来获取这些信息呢?Zubair…您可以让jvisualvm监视您的应用程序(JVM);不是您的应用程序调用jvisualvm。如何在无头环境中运行visualVM?您可以使用jvisualvm远程监视应用程序…不确定您正在寻找什么细节,或者这是否是一个已加载的问题,还有什么需要等待…我的观点是,如果您可以利用jvisualvm或jconsole提供的内容,那么就这样做;不要创建JMX钩子来传播已经可用的信息。啊,我不知道。我如何从Java代码中调用VisualVM来获取这些信息呢?Zubair…您可以让jvisualvm监视您的应用程序(JVM);不是您的应用程序调用jvisualvm。最简单的:java.lang.management.ManagementFactory.getThreadMXBean()和java.lang.management.ManagementFactory.getThreadMXBean()在哪里指定远程主机名?
remote
是新的:)。这次可能是一个链接:我尝试了该链接,但它没有给出平台MBeanServerSimplest:java.lang.management.ManagementFactory.getThreadMXBean()和java.lang.management.ManagementFactory.getThreadMXBean()的JMXServiceURL URI,我在哪里指定远程主机名?remote
是新的:)。这次可能是一个链接:我尝试了这个链接,但它没有给出平台MBeanServer的JMXServiceURL URI。为什么投票失败?答案正是被问到的:(为什么投反对票?答案正是被问到的:(