Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用JMX访问远程JVM的线程?_Java_Jmx - Fatal编程技术网

Java 如何使用JMX访问远程JVM的线程?

Java 如何使用JMX访问远程JVM的线程?,java,jmx,Java,Jmx,我如何使用JMX访问远程JVM的线程?为什么不使用它,因为它是SDK的一部分,可以让您访问给定JVM中的线程以及其他内容 尝试复制已经存在的调试功能毫无意义。为什么不使用它,因为它是SDK的一部分,可以让您访问给定JVM中的线程以及其他内容 尝试复制已经存在的调试功能是没有意义的。这是一个非常古老的线程,但是由于我在寻找并找到了这个问题的实际答案,我不妨发布它 上面展示了一个关于如何访问远程JMX上所有线程的非常好的示例 在大纲中: // First connect to the remote

我如何使用JMX访问远程JVM的线程?

为什么不使用它,因为它是SDK的一部分,可以让您访问给定JVM中的线程以及其他内容

尝试复制已经存在的调试功能毫无意义。

为什么不使用它,因为它是SDK的一部分,可以让您访问给定JVM中的线程以及其他内容


尝试复制已经存在的调试功能是没有意义的。

这是一个非常古老的线程,但是由于我在寻找并找到了这个问题的实际答案,我不妨发布它

上面展示了一个关于如何访问远程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。为什么投票失败?答案正是被问到的:(为什么投反对票?答案正是被问到的:(