有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在远程Glassfish服务器上激活JMX,以便使用jconsole进行访问?

我想监控远程glassfish服务器。我已在域中启用JMX连接。xml:

<jmx-connector accept-all="true" address="0.0.0.0" auth-realm-name="admin-realm" enabled="true" name="system" port="8686" protocol="rmi_jrmp" security-enabled="false">

但这没用。我仍然无法使用JConsole连接到服务器。然后我找到了解决方案——我需要在域中指定JVM属性。xml打开8686端口进行远程连接。 因此,我在java配置部分添加了以下内容:

<jvm-options>-Dcom.sun.management.jmxremote</jvm-options>
<jvm-options>-Dcom.sun.management.jmxremote.port=8686</jvm-options>
<jvm-options>-Dcom.sun.management.jmxremote.local.only=false</jvm-options>
<jvm-options>-Dcom.sun.management.jmxremote.authenticate=false</jvm-options>

但现在,当我启动服务器时,会出现以下错误:

Could not load Logmanager "com.sun.enterprise.server.logging.ServerLogManager" java.lang.ClassNotFoundException: com.sun.enterprise.server.logging.ServerLogManager at java.net.URLClassLoader$1.run(URLClassLoader.java:200) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:252) at java.util.logging.LogManager$1.run(LogManager.java:166) at java.security.AccessController.doPrivileged(Native Method) at java.util.logging.LogManager.(LogManager.java:156) at java.util.logging.Logger.getLogger(Logger.java:273) at sun.management.snmp.util.MibLogger.(MibLogger.java:57) at sun.management.snmp.util.MibLogger.(MibLogger.java:42) at sun.management.jmxremote.ConnectorBootstrap.(ConnectorBootstrap.java:760) at sun.management.Agent.startAgent(Agent.java:127) at sun.management.Agent.startAgent(Agent.java:239) javax.management.JMRuntimeException: Failed to load MBeanServerBuilder class com.sun.enterprise.admin.server.core.jmx.AppServerMBeanServerBuilder: java.lang.ClassNotFoundException: com.sun.enterprise.admin.server.core.jmx.AppServerMBeanServerBuilder at javax.management.MBeanServerFactory.checkMBeanServerBuilder(MBeanServerFactory.java:480) at javax.management.MBeanServerFactory.getNewMBeanServerBuilder(MBeanServerFactory.java:511) at javax.management.MBeanServerFactory.newMBeanServer(MBeanServerFactory.java:298) at javax.management.MBeanServerFactory.createMBeanServer(MBeanServerFactory.java:213) at javax.management.MBeanServerFactory.createMBeanServer(MBeanServerFactory.java:174) at sun.management.ManagementFactory.createPlatformMBeanServer(ManagementFactory.java:302) at java.lang.management.ManagementFactory.getPlatformMBeanServer(ManagementFactory.java:504) at sun.management.jmxremote.ConnectorBootstrap.initialize(ConnectorBootstrap.java:392) at sun.management.Agent.startAgent(Agent.java:127) at sun.management.Agent.startAgent(Agent.java:239) Caused by: java.lang.ClassNotFoundException: com.sun.enterprise.admin.server.core.jmx.AppServerMBeanServerBuilder at java.net.URLClassLoader$1.run(URLClassLoader.java:200) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:252) at javax.management.MBeanServerFactory.loadBuilderClass(MBeanServerFactory.java:423) at javax.management.MBeanServerFactory.checkMBeanServerBuilder(MBeanServerFactory.java:465) ... 9 more Exception thrown by the agent : javax.management.JMRuntimeException: Failed to load MBeanServerBuilder class com.sun.enterprise.admin.server.core.jmx.AppServerMBeanServerBuilder: java.lang.ClassNotFoundException: com.sun.enterprise.admin.server.core.jmx.AppServerMBeanServerBuilder

我怎样才能解决这个问题

提前谢谢


共 (4) 个答案

  1. # 1 楼答案

    仍然是神秘的行为,但有了这4个设置,您可以连接到运行Glassfish的JVM(在管理控制台中添加到domain.xml,需要重新启动)

    -Djava.rmi.server.hostname=yourhost
    -Dcom.sun.management.jmxremote.port=8686
    -Dcom.sun.management.jmxremote.ssl=false
    -Dcom.sun.management.jmxremote.authenticate=false
    

    小心!这并不安全,因为现在任何人都可以将jconsole连接到它

    在我看来,这不是Glassfish的方式,它使用的是JMX连接器

    (以上工程见GF 3.1)

  2. # 2 楼答案

    不是吗

  3. # 3 楼答案

    如果在Glassfish app server中运行应用程序,只需运行以下asadmin命令,就需要重新启动所有正在运行的服务器,更改才能生效

    /asadmin启用安全管理

    有额外的Glassfish服务器配置来进一步启用安全性,请参阅Connecting remotely to Glassfish through JMX上的更多信息

    您确实需要遵循JVM选项上的步骤,这些是Java应用程序的一般说明。对于使用Glassfish应用服务器运行的Java应用程序,只需使用asadm命令。这节省了我很多时间

    **另一个注意事项是,如果只有使用JVM选项的设置,Glassfish将无法启动上述运行时异常。 **我用的是GF3。1.2及以上版本,以及Java 7

  4. # 4 楼答案

    最后,我设置了以下选项,以确保使用Glassfish的JMX对防火墙友好:

    <jvm-options>-Dcom.sun.aas.jconsole.server.cbport=XXXX</jvm-options>
    

    其中XXXX是防火墙中使用的端口号,以及应用服务器配置的JMX端口号(通常为8686)

    this blogpost中阅读更多内容。请注意,此功能需要更新版本的Glassfish。我已经成功地将其用于Glassfish 2.1.1