如何在ubuntu中将JMC(Java任务控制)连接到远程JVM?

如何在ubuntu中将JMC(Java任务控制)连接到远程JVM?,java,ubuntu,jmc,Java,Ubuntu,Jmc,我能够在同一系统上连接JMC到JVM。但是,我想监视远程服务器。如何将本地JMC连接到远程JVM?文档中介绍了所有内容: 1.单击帮助->Java任务控制帮助。 2.查看JVM浏览器帮助 有关更多详细信息,请查看: 首先,需要在服务器上启用外部JMX代理。为此,可以将相关的com.sun.management.jmxremote添加到要连接到的服务器JVM的命令行标志中。下面是一组可以使用的系统属性的简单示例。它们禁用了安全性和身份验证,因此在生产中永远不要这样使用它: -Dcom.sun.m

我能够在同一系统上连接JMC到JVM。但是,我想监视远程服务器。如何将本地JMC连接到远程JVM?

文档中介绍了所有内容:
1.单击帮助->Java任务控制帮助。
2.查看JVM浏览器帮助

有关更多详细信息,请查看:

首先,需要在服务器上启用外部JMX代理。为此,可以将相关的com.sun.management.jmxremote添加到要连接到的服务器JVM的命令行标志中。下面是一组可以使用的系统属性的简单示例。它们禁用了安全性和身份验证,因此在生产中永远不要这样使用它:

-Dcom.sun.management.jmxremote.port=7091
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
接下来,在JMC中创建一个自定义连接。您可以通过单击JVM浏览器中的“创建自定义连接”按钮来执行此操作:

在接下来的对话框中,只需输入主机和端口

如果遇到问题,请首先查看JMC附带文档的最后一章(常见问题):


如果这没有帮助,JMC论坛有一个更广泛的FAQ:。

在服务器{Ubuntu}中编辑
/etc/hosts
文件

127.0.1.1       server-name
用这一行替换上面的行

<system-ip>     server-name
服务器名称

我的环境是Linux中的jboss 7.1,我试图将JMC连接到我的jboss实例,最初我遇到了连接被拒绝的问题-经过一天半的挖掘,远程JMC现在可以为我工作了,在standalone.conf中有以下配置:

JBOSS_MODULES_SYSTEM_PKGS="org.jboss.byteman,org.jboss.logmanager"

JAVA_OPTS="$JAVA_OPTS -Djboss.modules.system.pkgs=$JBOSS_MODULES_SYSTEM_PKGS"


JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.jboss.logmanager.LogManager"

JAVA_OPTS="$JAVA_OPTS -Xbootclasspath/p:/apps/jboss-as-7.1.1.Final/modules/org/jboss/logmanager/main/jboss-logmanager-1.2.2.GA.jar"
JAVA_OPTS="$JAVA_OPTS -Xbootclasspath/p:/apps/jboss-as-7.1.1.Final/modules/org/jboss/logmanager/log4j/main/jboss-logmanager-log4j-1.0.0.GA.jar"
JAVA_OPTS="$JAVA_OPTS -Xbootclasspath/p:/apps/jboss-as-7.1.1.Final/modules/org/apache/log4j/main/log4j-1.2.16.jar"

JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote=true"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=7091"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.rmi.port=7091"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=false"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.ssl=false"

JAVA_OPTS="$JAVA_OPTS -XX:+UnlockCommercialFeatures"
JAVA_OPTS="$JAVA_OPTS -XX:+FlightRecorder"

如果仍然没有建立连接,hirt提供的另一个答案会有用得多。请尝试添加以下Java系统属性
-Djava.rmi.server.hostname=
Yep。这在附带的文档(最后一章-常见问题)中被列为要尝试的事情之一。我可能还应该链接到论坛中的常见问题:将其添加到我的答案中。在SSH隧道中,
-Djava.rmi.server.hostname=localhost
-Dcom.sun.management.jmxremote.rmi.port=[…]
需要让客户端使用已知端口而不是随机端口通过隧道访问远程RMI对象。这里有一篇介绍如何进行SSH隧道的文章。这对我来说很有用,因为我无法直接连接到远程进程。我想特别关注
-Dcom.sun.management.jmxremote.rmi.port=[…]
,这是防火墙、SSH隧道等情况下所需要的,因为没有它,rmi会使用随机端口来提供客户端需要访问的远程对象<代码>-Djava.rmi.server.hostname=[…]也可能是必需的。