java java-ee websphere jmx jconsole

java - ¿Cómo habilita JMX en Websphere?



java-ee jconsole (12)

Me gustaría utilizar JConsole para monitorear mi aplicación Websphere, pero no estoy seguro de cómo habilitar JMX.


De acuerdo. Hay dos formas de hacerlo: una con el conector SOAP uno con el conector RMi / IIOP.

Para SOAP necesita realizar la configuración de WAS para agregar un nuevo puerto y otros argumentos de JVM descritos anteriormente. Pero todo lo que obtienes una vez que JConsole se conecta al servidor son métricas básicas de JVM.

Con RMI, obtiene todo lo que expone WebSphere. Todos los MBeans! La única advertencia es: si su WAS JVM está detrás de un firewall, necesitará abrir un puerto para acceder desde su escritorio. ¡Pero puede ejecutar esto a través de X11 directamente desde el host del servidor de la aplicación!

Usé JDK7 en mi escritorio con Windows XP para conectarme a WAS 7.0 con seguridad global habilitada. Tomé un guión de la respuesta n. ° 4 anterior y lo usé como punto de partida. Aquí está mi versión de esto:

@echo off set HOST=<put hostname here> set PORT=<put JVM''s BOOTSTRAP_PORT here> set WAS_HOME=C:/jconsole set JAVA_HOME=C:/glassfish3/jdk7 set PROPS_DIR=C:/jconsole/properties set CLIENTSAS=-Dcom.ibm.CORBA.ConfigURL=file:/%PROPS_DIR%/sas.client.props set CLIENTSSL=-Dcom.ibm.SSL.ConfigURL=file:/%PROPS_DIR%/ssl.client.props set PROVIDER=-Djava.naming.provider.url=corbaname:iiop:%HOST%:%PORT% set PROPS= set PROPS=%PROPS% %CLIENTSAS% %CLIENTSSL% %PROVIDER% set CLASSPATH= set CLASSPATH=%CLASSPATH%;%WAS_HOME%/com.ibm.ws.admin.client_7.0.0.jar set CLASSPATH=%CLASSPATH%;%WAS_HOME%/com.ibm.ws.ejb.thinclient_7.0.0.jar set CLASSPATH=%CLASSPATH%;%WAS_HOME%/com.ibm.ws.orb_7.0.0.jar set CLASSPATH=%CLASSPATH%;%JAVA_HOME%/lib/jconsole.jar set CLASSPATH=%CLASSPATH%;%JAVA_HOME%/lib/tools.jar set URL=service:jmx:iiop://%HOST%:%PORT%/jndi/JMXConnector @echo on %JAVA_HOME%/bin/java -classpath %CLASSPATH% %PROPS% sun.tools.jconsole.JConsole %URL%

WAS_HOME es solo un directorio donde tengo esos JAR de IBM que descargué de mis binarios de WebSphere (fuera de Solaris). También creé dos subdirectorios debajo: propiedades y almacén de claves . En el subdirectorio de propiedades puse mis sas.client.props y ssl.client.props, también descargados de una celda WAS7 en funcionamiento (lo saqué de un DM). En el subdirectorio de keystore pongo los archivos key.p12 y trust.p12, también descargados de una celda WAS7. ¡Asegúrate de que tengan los certs correctos! Si los de WAS / etc no funcionan, pruebe los de $ {CONFIG_ROOT} / cells /. ¡Modifique ssl.client.props para asegurarse de que la ruta a los archivos p12 es correcta!

Ahora, para que esto funcione, también debe descargar lo siguiente de sus binarios WAS:

WAS_BIN_HOME/java/jre/lib/endorsed

Coloque todo este directorio en el directorio jre / lib de su SUN JDK. Esto se ocupa de los errores del Proveedor IBM JSSE2 y demás. Además, obtenga los siguientes tres archivos de WAS_BIN_HOME / java / jre / lib / security :

java.security local_policy.jar US_export_policy.jar

Simplemente sobrescribí los que venían con el JDK de SUN con los que tomé de IBM.

Además, en sas.client.props, asegúrese de ingresar la identificación de usuario y la contraseña, de forma similar a cómo lo hace en soap.client.props. Puede codificar la contraseña de la misma manera. Esto es necesario para superar BasicAuth de Global Security.

Creo que eso es todo. PD. No soy un profesional de Windows, así que si hay una manera más clara de hacerlo, por favor compártelo.


Descubrí que para conectarme a WAS 6.1 usando Sun JDK JConsole, además del archivo com.ibm.ws.admin.client_6.1.0.jar JAR, también tenía que incluir los siguientes 3 JAR en la ruta de la clase de arranque al iniciar JConsole: -

ibmorbapi.jar ibmorb.jar ibmcfw.jar

Estos se pueden encontrar en el directorio java / jre / lib de websphere.

Por ejemplo, en Windows, si copia los cuatro JAR enumerados anteriormente en un directorio de su elección (los he copiado en C: / packages / was61-jmx en el ejemplo a continuación), puede usar un archivo por lotes como el siguiente para iniciar JConsole: -

set JAVA_HOME=C:/Progra~1/Java/jdk1.5.0_20 set WAS6.1_JARS=C:/packages/was61-jmx set BOOTJARS=%WAS6.1_JARS%/ibmorbapi.jar set BOOTJARS=%BOOTJARS%;%WAS6.1_JARS%/ibmorb.jar set BOOTJARS=%BOOTJARS%;%WAS6.1_JARS%/ibmcfw.jar set CLASSPATH=%WAS6.1_JARS%/com.ibm.ws.admin.client_6.1.0.jar set CLASSPATH=%CLASSPATH%;%JAVA_HOME%/lib/tools.jar set CLASSPATH=%CLASSPATH%;%JAVA_HOME%/lib/jconsole.jar %JAVA_HOME%/bin/jconsole -J-Xbootclasspath/p:%BOOTJARS% -J-Djava.class.path=%CLASSPATH%

Esto funcionó para mí para jdk 1.5 y 1.6 versiones de Sun Jconsole.


Es simple. Simplemente inicie Websphere con los siguientes parámetros JMX:

-Djavax.management.builder.initial= -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.port=1099

Luego inicie JConsole o VisualVM y conéctese a localhost: 1099

Como no puedo publicar una captura de pantalla de prueba, publico la información de la "pestaña de descripción general" de visualvm.

PID: 12568 Host: localhost Main class: <unknown> Arguments: <none> JVM: IBM J9 VM (2.3, J2RE 1.5.0 IBM J9 2.3 Windows XP x86-32 j9vmwi3223-20100808 (JIT enabled) J9VM - 20100629_60535_lHdSMr JIT - 20100623_16197_r8 GC - 20100211_AA) Java: version 1.5.0, vendor IBM Corporation Java Home: C:/Program Files/IBM/SDP/runtimes/base_v61/java/jre JVM Flags: <none> Heap dump on OOME: disabled


La siguiente información es para Websphere 6.1 en Windows.

En primer lugar, la URL mágica para conectarse al servidor MBean es:

service:jmx:iiop://<host>:<port>/jndi/JMXConnector

Si tiene una instalación predeterminada de Websphere, el número de puerto JNDI probablemente será 2809, 2810, ... dependiendo de cuántos servidores haya instalados en un sistema y el específico al que desee conectarse. Para estar seguro, al iniciar Websphere, verifique los registros, ya que va a volcar una línea como

0000000a RMIConnectorC A ADMC0026I: The RMI Connector is available at port 2810

Si no obtiene esta línea, abra la consola de administración de Websphere y vaya a

Servidores de aplicaciones> servidor1> Servicios de administración> Conectores JMX

para ver si necesitas agregar o cambiar la configuración.

La segunda parte importante de la información es que siempre se necesita el siguiente JAR cuando se hace JMX con el servidor:

com.ibm.ws.admin.client_6.1.0.jar

Puede encontrar este JAR en el directorio de runtimes de Websphere. Hagas lo que hagas, ya sea accediendo mediante programación a MBeans en Websphere, o usando JConsole, y demás, utiliza la URL mágica y siempre incluye este JAR.

Para el resto de esta respuesta, suponga que Websphere está instalado en D: / prog / was61.

Para ejecutar JConsole, escriba lo siguiente:

D:/prog/was61/java/bin>jconsole -J-Djava.class.path=d:/prog/was61/java/lib/tools.jar;D:/prog/was61/runtimes/com.ibm.ws.admin.client_6.1.0.jar

Luego ve a la pestaña "Avanzado" y escribe la URL JMX mágica. Presione conectar y debería ver aparecer los MBeans.

El uso de Sun JDK es un asunto completamente diferente. Necesita un JAR adicional que se encuentre en la lib de IBM JDK pero no de Sun (ibmorb.jar), y tal vez el siguiente comando le funcione:

C:/Program Files/Java/jdk1.5.0_11/bin>jconsole -J-Djava.class.path="c:/Program Files/Java/jdk1.5.0_11/lib/jconsole.jar";"c:/Program Files/Java/jdk1.5.0_11/lib/tools.jar";D:/prog/was61/runtimes/com.ibm.ws.admin.client_6.1.0.jar;D:/prog/was61/java/jre/lib/ibmorb.jar

Yo digo que tal vez, porque no funcionó para mí. Obtuve un buen mensaje de error jndiUnavailCommErr, ya que esperaba algo en el puerto 2809 mientras la instalación de Websphere está escuchando en 2810, aunque especifiqué correctamente el puerto 2810 en la URL JMX. Pero, si adapta las rutas para apuntar a su Sun JDK, podría funcionar para usted. Es lo más cerca que he estado de conectarme a Websphere usando Sun''s JDK.

Nota final: Intenté una solución basada en RMI, también hay un conector SOAP disponible pero no lo he probado.

Como siempre con J2EE, Websphere y demás: buena suerte, la necesitarás.



No pude hacer que esto funcione. Todo lo que obtuve fue

La conexión al servicio de nombre de usuario @: jmx: iiop // localhost: 2809 / jndi / JMXConnector no tuvo éxito. ¿Le gustaría volver a intentarlo?

Sin embargo, lo hice funcionar haciendo lo siguiente:

  1. Agregue "-Djavax.management.builder.initial = -Dcom.sun.management.jmxremote" al Argumento JVM genérico.
  2. Agregue estas líneas a WebSphere / AppServer / java / jre / lib / management / management.properties

com.sun.management.jmxremote.port=9999 com.sun.management.jmxremote.authenticate=false com.sun.management.jmxremote.ssl=false

Pero ninguno de los mbeans útiles aparece ...?


No puede establecer las propiedades del sistema requeridas a través de la consola WAS, porque no le permite especificar valores vacíos. En su lugar, debe insertar lo siguiente en la parte inferior de ''server.xml'':

<systemProperties xmi:id="Property_1315391623828" name="com.sun.management.jmxremote" value="" required="false"/> <systemProperties xmi:id="Property_1315327918140" name="com.sun.management.jmxremote.port" value="1235" required="false"/> <systemProperties xmi:id="Property_1315327935281" name="com.sun.management.jmxremote.authenticate" value="false" required="false"/> <systemProperties xmi:id="Property_1315327948046" name="com.sun.management.jmxremote.ssl" value="false" required="false"/> <systemProperties xmi:id="Property_1315390852859" name="javax.management.builder.initial" value="" required="false"/>


Puede encontrar el puerto correcto para conectarse en WebSphere Application Server en Comunicaciones -> Puertos. El puerto asociado con BOOTSTRAP_ADDRESS le permite conectarse.


Tal vez es un poco offtopic, pero he encontrado una manera de conectarse al servidor WAS 7.0 JMX de JConsole. No se requiere configuración de servidor, no hay AppClient, solo algunos JAR y una pequeña configuración de cliente.

Use la siguiente secuencia de comandos

@echo off set HOST=<host> set PORT=2809 set WAS_HOME=D:/Programy/IBM/WebSphere/AppServer set THIS_DIR=E:/Home/Bogus/Pulpit set CLIENTSAS=-Dcom.ibm.CORBA.ConfigURL=file:/%THIS_DIR%/sas.client.props set PROVIDER=-Djava.naming.provider.url=corbaname:iiop:%HOST%:%PORT% set PROPS= set PROPS=%PROPS% %CLIENTSAS% set PROPS=%PROPS% %PROVIDER% set CLASSPATH= set CLASSPATH=%CLASSPATH%;%WAS_HOME%/java/lib/tools.jar set CLASSPATH=%CLASSPATH%;%WAS_HOME%/runtimes/com.ibm.ws.admin.client_7.0.0.jar set CLASSPATH=%CLASSPATH%;%WAS_HOME%/runtimes/com.ibm.ws.ejb.thinclient_7.0.0.jar set CLASSPATH=%CLASSPATH%;%WAS_HOME%/runtimes/com.ibm.ws.orb_7.0.0.jar set CLASSPATH=%CLASSPATH%;%WAS_HOME%/java/lib/jconsole.jar set URL=service:jmx:iiop://%HOST%:%PORT%/jndi/JMXConnector @echo on :: %WAS_HOME%/java/bin/ java -classpath %CLASSPATH% %PROPS% sun.tools.jconsole.JConsole %URL%

Si el servidor de destino tiene desactivada la seguridad administrativa, comente las líneas CLIENTSAS y PROVIDER.

Si la seguridad está habilitada, también necesitará el archivo sas.client.props para ubicarlo en el directorio THIS_DIR. El archivo de plantilla se puede encontrar en el directorio WAS_profile / properties. Tendrás que hacer una pequeña configuración. Aquí hay un extracto de mi sas.client.props

com.ibm.CORBA.securityEnabled=true com.ibm.CORBA.authenticationTarget=BasicAuth com.ibm.CORBA.authenticationRetryEnabled=true com.ibm.CORBA.authenticationRetryCount=3 com.ibm.CORBA.validateBasicAuth=true com.ibm.CORBA.securityServerHost= com.ibm.CORBA.securityServerPort= com.ibm.CORBA.loginTimeout=300 com.ibm.CORBA.loginSource=prompt com.ibm.CORBA.loginUserid= com.ibm.CORBA.loginPassword= com.ibm.CORBA.krb5ConfigFile= com.ibm.CORBA.krb5CcacheFile= com.ibm.CSI.performStateful=true com.ibm.CSI.performClientAuthenticationRequired=false com.ibm.CSI.performClientAuthenticationSupported=true # SET ALL THE FOLLOWING VALUES TO FALSE com.ibm.CSI.performTLClientAuthenticationRequired=false com.ibm.CSI.performTLClientAuthenticationSupported=false com.ibm.CSI.performTransportAssocSSLTLSRequired=false com.ibm.CSI.performTransportAssocSSLTLSSupported=false com.ibm.CSI.performMessageIntegrityRequired=false com.ibm.CSI.performMessageIntegritySupported=false com.ibm.CSI.performMessageConfidentialityRequired=false com.ibm.CSI.performMessageConfidentialitySupported=false # COMMENT THIS OUT #com.ibm.ssl.alias=DefaultSSLSettings com.ibm.CORBA.requestTimeout=180

OKAY :)

Después de conectarse, aparecerá la ventana emergente de inicio de sesión. Escriba su usuario de administrador y contraseña (el usuario y pw no son necesarios en el cuadro de diálogo de conexión en JConsole)

Puede ejecutar JConsole desde IBM JDK o Sun JDK. Para IBM, no se requiere ninguna otra configuración. Sin embargo, para Sun es posible que deba colocar el archivo orb.properties en su directorio de inicio. El archivo se puede encontrar en com.ibm.ws.ejb.thinclient_7.0.0.jar.


También luché durante unas horas para hacer que esto funcionara y encontré la solución. La cuestión clave aquí es SSL: el cliente debe usar las claves adecuadas para establecer una conexión SSL con el servidor. Esto implica apuntar a la ubicación correcta del almacén de confianza y la contraseña del almacén de confianza como se describe here . La mejor forma de configurar el entorno es llamar a setupCmdLine.sh (en Windoze es setupCmdLine.bat) para el servidor correspondiente, y luego invocar jconsole de la siguiente manera:

#!/bin/bash WAS_HOME=/opt/IBM/WebSphere/AppServer # setup server-specific env variables . $WAS_HOME/profiles/AppSrv01/bin/setupCmdLine.sh HOST=localhost PORT=9100 CLASSPATH=$JAVA_HOME/lib/jconsole.jar CLASSPATH=$CLASSPATH:$WAS_HOME/runtimes/com.ibm.ws.admin.client_8.5.0.jar CLASSPATH=$CLASSPATH:$WAS_HOME/runtimes/com.ibm.ws.ejb.thinclient_8.5.0.jar CLASSPATH=$CLASSPATH:$WAS_HOME/runtimes/com.ibm.ws.orb_8.5.0.jar $JAVA_HOME/bin/jconsole / -J-Djava.class.path=$CLASSPATH/ -J$CLIENTSAS/ -J$CLIENTSSL/ service:jmx:iiop://$HOST:$PORT/jndi/JMXConnector


de http://malliktalksjava.in/2010/07/26/enable-jmx-remote-port-in-websphere/

  1. Inicie sesión en la consola de administración de la esfera web de cualquier perfil (servidor), el acceso directo estará disponible en los programas del menú de inicio.

    • Implemente la aplicación PerfServletApp.ear si aún no se implementó.
    • Compruebe si se implementó PerfServletApp.ear :
      • Exapnd Applications +> Tipos de aplicaciones +> Aplicaciones de WebSphere Enterpise
      • De lo contrario, haga clic en Nueva aplicación .
    • Navegue desde el directorio de WebSphere -> AppServer -> InstallableApps .
    • (SIGUE LOS PASOS.)
  2. Habilite los datos de PMI y configure todas las estadísticas habilitadas.

    • En el panel izquierdo (abajo), vaya a Supervisión y ajuste +> Infraestructura de supervisión del rendimiento (PMI)
    • En la pestaña Configuración , habilite el PMI .
    • En esta pestaña Configuración , y en la pestaña Runtime , configure Todas las estadísticas . Luego guarda los cambios.
  3. Establecer el argumento de JVM

    • En Severs +> Tipos de servidores +> Servidores de aplicaciones WebSphere , luego -> [nombre-servidor] +> Definición del proceso -> Máquina virtual Java
    • Establezca el argumento genérico jvm para incluir

      -Djavax.management.builder.initial= -Dcom.sun.management.jmxremote

    en muestra la lista de servidores. haga clic en el servidor que desea.

    • En el panel derecho -> Infraestructura del servidor -> Java y Gestión de Procesos, haga clic en Definición del proceso , nuevamente en la pestaña Propiedades adicionales de Configuración, haga clic en Máquina virtual Java . pon el -Djavax.management.builder.initial= -Dcom.sun.management.jmxremote en el campo Genérico Jvm Argument y guarda los cambios.
  4. Para habilitar el puerto remoto JMX abra el siguiente archivo de propiedades y agregue el siguiente código. En [directorio-WebSphere] / AppServer / java / jre / lib / management / management.properties , agregue:

    com.sun.management.jmxremote.port=9001 com.sun.management.jmxremote.ssl=false com.sun.management.jmxremote.authenticate=false

  5. Guarde los datos maestros, detenga el servidor e inicie el servidor para cargar los cambios.


puede intentar lo siguiente, usa el adaptador de protocolo SOAP. Creo que es una configuración lo más esbelta posible.

#!/bin/sh current_dir=`dirname "$0"` HOSTNAME=host.fqdn PORT=2809 WAS_HOME=/opt/IBM/WebSphere/AppServer WAS_PROFILE=$WAS_HOME/profiles/AppSrv01 WAS_RUNTIMES=$WAS_HOME/runtimes WAS_LIB=$WAS_HOME/java/lib JAVA_HOME=$WAS_HOME/java CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/jconsole.jar:$WAS_RUNTIMES/com.ibm.ws.admin.client_7.0.0.jar:$WAS_LIB/ibmcfw.jar TARGET=service:jmx:soap://$HOSTNAME:$PORT/jndi/JMXConnector CP="-J-Djava.class.path=$CLASSPATH" SSL_SERVER_KEY="-J-Djavax.net.ssl.keyStore=$WAS_PROFILE/etc/DummyServerKeyFile.jks -J-Djavax.net.ssl.keyStorePassword=WebAS" SSL_TRUST_STORE="-J-Djavax.net.ssl.trustStore=$WAS_PROFILE/etc/DummyServerTrustFile.jks -J-Djavax.net.ssl.trustStorePassword=WebAS" SSL_OPTS="-J-Dcom.ibm.SSL.ConfigURL=file:$WAS_PROFILE/properties/ssl.client.props" SOAP_OPTS="-J-Dcom.ibm.SOAP.ConfigURL=file:$WAS_PROFILE/properties/soap.client.props" WAS_OPTS="-J-Dwas.install.root=$WAS_HOME -J-Djava.ext.dirs=$WAS_HOME/plugins:$WAS_HOME/lib:$WAS_HOME/plugins/com.ibm.ws.security.crypto_6.1.0:$WAS_HOME/lib:$JAVA_HOME/jre/lib/ext" COMMAND="$JAVA_HOME/bin/jconsole $CP $SSL_SERVER_KEY $SSL_TRUST_STORE $SSL_OPTS $SOAP_OPTS $WAS_OPTS $TARGET" exec $COMMAND

Créditos a mi colega Jeroen para la versión inicial de la secuencia de comandos usando IIOP (estoy probando SOAP con la esperanza de que funcione con Hyperic)