8

我有远程 JBoss 7.1 服务器,我想使用 VisualVM 或 JConsole 连接到该服务器。

我搜索了一下,发现了几个关于如何使用 VisualVM 或 JCoonsole 连接到 JBoss 7.1 的线程/教程,例如:

不幸的是,我无法通过 JMX 连接到我的 JBoss 7.1。

您对如何使用 VisualVM 连接到 JBoss 7.1 有任何想法吗?

编辑:我添加 -Dcom.sun.management.jmxremote.port=1090 -Dcom.sun.management.jmxremote.authenticate=false 到standalone.conf.bat,但我得到一个异常: 引起:java.lang.IllegalStateException: LogManager 未正确安装(您必须将“java.util.logging.manager”系统属性设置为“org.jboss.logmanager.LogManager”)。

所以,我向 JAVA_OPTS 添加了另一个选项: -Dcom.sun.management.jmxremote.port=1090 -Dcom.sun.management.jmxremote.authenticate=false -Djava.util.logging.manager=org.jboss.logmanager.LogManager 但是我收到的例外是:

Could not load Logmanager "org.jboss.logmanager.LogManager"
java.lang.ClassNotFoundException: org.jboss.logmanager.LogManager
        at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
4

4 回答 4

7

找到了解决方案。我需要在standalone.conf.bat 中将以下参数添加到JAVA_OPTS:

-Dcom.sun.management.jmxremote.port=1090 ^
-Dcom.sun.management.jmxremote.authenticate=false ^
-Dcom.sun.management.jmxremote ^
-Dcom.sun.management.jmxremote.ssl=false ^
-Djava.util.logging.manager=org.jboss.logmanager.LogManager ^
-Xbootclasspath/p:<JBOSS_PATH>/modules/org/jboss/logmanager/main/jboss-logmanager-1.2.2.GA.jar ^
-Xbootclasspath/p:<JBOSS_PATH>/modules/org/jboss/logmanager/log4j/main/jboss-logmanager-log4j-1.0.0.GA.jar ^
-Xbootclasspath/p:<JBOSS_PATH>/modules/org/apache/log4j/main/log4j-1.2.16.jar -Djboss.modules.system.pkgs=org.jboss.logmanager

注意 1:在 Unix 上使用\而不是。^

注意 2:替换<JBOSS_PATH>为您的 JBoss 7.x 安装路径。我的是c:/java/jboss-as-7.1.1.Final

于 2013-10-02T12:01:15.743 回答
3

如果您打开一个命令 shell 并输入“netstat -a”,您是否在 JMX 端口 1090 上看到了一些 LISTENING 内容?如果没有,也许您必须检查 JBOSS 配置。

https://community.jboss.org/thread/171346?start=0&tstart=0

于 2013-10-02T11:12:34.460 回答
3

您可以直接连接到 JBOSS JMX 而不是 VM 之一(无需修改 JAVA_OPTS)

只需确保您在standalone.xml 中有以下配置(JMX 子系统处于活动状态)

在独立模式下(监听端口 9999):

<subsystem xmlns="urn:jboss:domain:jmx:1.1">  
  <show-model value="true"/>  
  <remoting-connector />  
</subsystem> 

在域模式下(监听端口 4447)

<subsystem xmlns="urn:jboss:domain:jmx:1.1">  
  <show-model value="true"/>  
  <remoting-connector use-management-endpoint="false"/>  
</subsystem>

然后我们需要一点技巧:由于 JBoss JMX 实现有点具体,我们需要在 JVisualVM 的类路径中包含一些 jboss lib

  • 获取文件$JBOSS_HOME/bin/jconsole.sh/jconsole.bat并将其复制/重命名为同一目录下的 jvisualvm.sh/jvisualvm.bat。

  • -cp:a "$CLASSPATH"然后使用而不是替换每个 jvisualvm 对 jconsole 的可执行调用-J-Djava.class.path="$CLASSPATH"

现在只需使用脚本启动 visualVM 并使用以下 url 添加新的 JMX 连接(文件菜单)service:jmx:remoting-jmx://hostname:port(凭据是管理领域之一)

注意:如果您无法直接访问 JMX 端口,请考虑使用 ssh 隧道

于 2014-11-05T16:39:17.660 回答
1
  1. 将 JVM opts 添加到 run.conf (run.conf.bat) JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management .jmxremote.ssl=false -Dcom.sun.management.jmxremote"

  2. 在 Visual VM 控制台中打开一个远程主机。并添加 JMX 连接并将端口号设为 <9999>

于 2014-04-16T18:27:13.783 回答