Still Shi
Still Shi

Reputation: 3

Connect VisualVM to JBOSS EAP 7.4.0 and java 11.0.22

I am trying to connect a VisualVM to a remote jboss EAP instance to check the performance. I have checked related posts but not got succeeded. The instruction I was following is:

Jboss EAP 7 - monitoring jboss using JvisualVM with JMX remote params

Connect to JBoss 7 using VisualVM

All effective lines in my standaline.conf follows:


if [ "x$JBOSS_MODULES_SYSTEM_PKGS" = "x" ]; then
   JBOSS_MODULES_SYSTEM_PKGS="org.jboss.byteman,org.jboss.logmanager"
fi

# Uncomment the following line to prevent manipulation of JVM options
# by shell scripts.
#
#PRESERVE_JAVA_OPTS=true

#
# Specify options to pass to the Java VM.
#
if [ "x$JAVA_OPTS" = "x" ]; then
   JAVA_OPTS="-Xms16g -Xmx16g -XX:MetaspaceSize=1g -XX:MaxMetaspaceSize=1g -Djava.net.preferIPv4Stack=true"
   JAVA_OPTS="$JAVA_OPTS -Djboss.modules.system.pkgs=$JBOSS_MODULES_SYSTEM_PKGS -Djava.awt.headless=true"
   JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=9010 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
   JAVA_OPTS="$JAVA_OPTS -Xbootclasspath/p:/home/admin/EAP-7.4.0/modules/system/layers/base/org/jboss/logmanager/main/jboss-logmanager-2.1.18.Final-redhat-00001.jar"
   JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.jboss.logmanager.LogManager"

else
   echo "JAVA_OPTS already set in environment; overriding default settings with values: $JAVA_OPTS"
fi
 
 
# enable garbage collection logging if not set in environment differently
if [ "x$GC_LOG" = "x" ]; then
   GC_LOG="true"
else
   echo "GC_LOG set in environment to $GC_LOG"
fi



However I encountered the following error:

[admin@localhost bin]$ ./standalone.sh 
=========================================================================

  JBoss Bootstrap Environment

  JBOSS_HOME: /home/admin/EAP-7.4.0

  JAVA: java

  JAVA_OPTS:  -server -Xlog:gc*:file="/home/admin/EAP-7.4.0/standalone/log/gc.log":time,uptimemillis:filecount=5,filesize=3M -Xms16g -Xmx16g -XX:MetaspaceSize=1g -XX:MaxMetaspaceSize=1g -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman,org.jboss.logmanager -Djava.awt.headless=true -Dcom.sun.management.jmxremote.port=9010 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Xbootclasspath/p:/home/admin/EAP-7.4.0/modules/system/layers/base/org/jboss/logmanager/main/jboss-logmanager-2.1.18.Final-redhat-00001.jar -Djava.util.logging.manager=org.jboss.logmanager.LogManager  --add-exports=java.base/sun.nio.ch=ALL-UNNAMED --add-exports=jdk.unsupported/sun.misc=ALL-UNNAMED --add-exports=jdk.unsupported/sun.reflect=ALL-UNNAMED

=========================================================================

-Xbootclasspath/p is no longer a supported option.
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

I tried to replace -Xbootclasspath/p with -Xbootclasspath/a and then got the following error:

java.lang.IllegalStateException: The LogManager was not properly installed (you must set the "java.util.logging.manager" system property to "org.jboss.logmanager.LogManager") at org.jboss.logmanager.Logger.getLogger(Logger.java:57) at [email protected]//org.jboss.as.server.Main.main(Main.java:89) at org.jboss.modules.Module.run(Module.java:353) at org.jboss.modules.Module.run(Module.java:321) at org.jboss.modules.Main.main(Main.java:617)

I also tried this: ./standalone.sh -Djava.util.logging.manager=org.jboss.logmanager.LogManager but with the same error.

I think it might be something related the diffrence between -Xbootclasspath/p (prepend) and -Xbootclasspath/a (append).

I also tried with --patch-module as followed

 JAVA_OPTS="$JAVA_OPTS --patch-module org.jboss.logmanager=/home/admin/EAP-7.4.0/modules/system/layers/base/org/jboss/logmanager/main/jboss-logmanager-2.1.18.Final-redhat-00001.jar"

but got this error

=========================================================================

  JBoss Bootstrap Environment

  JBOSS_HOME: /home/admin/EAP-7.4.0

  JAVA: java

  JAVA_OPTS:  -server -Xlog:gc*:file="/home/admin/EAP-7.4.0/standalone/log/gc.log":time,uptimemillis:filecount=5,filesize=3M -Xms16g -Xmx16g -XX:MetaspaceSize=1g -XX:MaxMetaspaceSize=1g -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman,org.jboss.logmanager -Djava.awt.headless=true -Dcom.sun.management.jmxremote.port=9010 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false --patch-module org.jboss.logmanager=/home/admin/EAP-7.4.0/modules/system/layers/base/org/jboss/logmanager/main/jboss-logmanager-2.1.18.Final-redhat-00001.jar -Djava.util.logging.manager=org.jboss.logmanager.LogManager  --add-exports=java.base/sun.nio.ch=ALL-UNNAMED --add-exports=jdk.unsupported/sun.misc=ALL-UNNAMED --add-exports=jdk.unsupported/sun.reflect=ALL-UNNAMED

=========================================================================

WARNING: Unknown module: org.jboss.logmanager specified to --patch-module
Could not load Logmanager "org.jboss.logmanager.LogManager"
java.lang.ClassNotFoundException: org.jboss.logmanager.LogManager
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    at java.logging/java.util.logging.LogManager$1.run(LogManager.java:239)
    at java.logging/java.util.logging.LogManager$1.run(LogManager.java:223)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at java.logging/java.util.logging.LogManager.<clinit>(LogManager.java:223)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at java.management/sun.management.ManagementFactoryHelper$LoggingMXBeanAccess.getMXBeanImplementation(ManagementFactoryHelper.java:238)
    at java.management/sun.management.ManagementFactoryHelper$LoggingMXBeanAccess.<init>(ManagementFactoryHelper.java:254)
    at java.management/sun.management.ManagementFactoryHelper$PlatformLoggingImpl.getInstance(ManagementFactoryHelper.java:334)
    at java.management/sun.management.ManagementFactoryHelper$PlatformLoggingImpl.<clinit>(ManagementFactoryHelper.java:337)
    at java.management/sun.management.ManagementFactoryHelper.getPlatformLoggingMXBean(ManagementFactoryHelper.java:156)
    at java.management/java.lang.management.DefaultPlatformMBeanProvider$9.nameToMBeanMap(DefaultPlatformMBeanProvider.java:386)
    at java.management/java.lang.management.ManagementFactory.lambda$getPlatformMBeanServer$0(ManagementFactory.java:487)
    at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:271)
    at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177)
    at java.base/java.util.HashMap$ValueSpliterator.forEachRemaining(HashMap.java:1692)
    at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
    at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
    at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
    at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
    at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:497)
    at java.management/java.lang.management.ManagementFactory.getPlatformMBeanServer(ManagementFactory.java:488)
    at jdk.management.agent/sun.management.jmxremote.ConnectorBootstrap.startRemoteConnectorServer(ConnectorBootstrap.java:475)
    at jdk.management.agent/jdk.internal.agent.Agent.startAgent(Agent.java:447)
    at jdk.management.agent/jdk.internal.agent.Agent.startAgent(Agent.java:599)
WARNING: Failed to load the specified log manager class org.jboss.logmanager.LogManager
Exception in thread "main" java.lang.NoClassDefFoundError: org/jboss/logmanager/Level
    at java.base/java.lang.Class.forName0(Native Method)
    at java.base/java.lang.Class.forName(Class.java:398)
    at org.jboss.modules.Module.run(Module.java:341)
    at org.jboss.modules.Module.run(Module.java:321)
    at org.jboss.modules.Main.main(Main.java:617)
Caused by: java.lang.ClassNotFoundException: org.jboss.logmanager.Level
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    at org.jboss.modules.JDKSpecific.getSystemClass(JDKSpecific.java:187)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:395)
    at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:116)

I think I've provided the wrong modle name...

Summary:

  1. I've followed the instruction how to connect visualvm to jboss EAP but it doesn't work with java 11, especially because Xbootclasspath/p is no longer supported.
  2. I've tried with Xbootclasspath/a but it looks it is different to Xbootclasspath/p
  3. Also tried with --patch-module but not sure if I've provided the correct module name and if it is the cause of the subsequent exception.

Please kindly advice how to connect visualVM to JBOSS VM 7.4.0 with Java 11.

Thank you!

Upvotes: 0

Views: 255

Answers (0)

Related Questions