web-dev-qa-db-fra.com

Comment activez-vous JMX dans Websphere?

J'aimerais utiliser JConsole pour surveiller mon application Websphere, mais je ne sais pas comment activer JMX.

29

Les informations suivantes concernent Websphere 6.1 sous Windows.

Tout d’abord, l’URL magique pour se connecter au serveur MBean est la suivante:

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

Si vous avez une installation Websphere par défaut, le numéro de port JNDI sera probablement 2809, 2810, ... en fonction du nombre de serveurs installés sur un système et du serveur spécifique auquel vous souhaitez vous connecter. Pour vous en assurer, lorsque vous démarrez Websphere, consultez les journaux, car il affichera une ligne telle que

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

Si vous n'obtenez pas cette ligne, ouvrez la console d'administration Websphere et accédez à 

Serveurs d'applications> serveur1> Services d'administration> JMX connecteurs

pour voir si vous devez ajouter ou modifier la configuration.

La deuxième information importante est que le fichier JAR suivant est toujours nécessaire lors de l'exécution de JMX avec le serveur:

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

Vous pouvez trouver ce fichier JAR dans le répertoire runtimes de Websphere. Quoi que vous fassiez, que vous accédiez par programme à MBeans sur Websphere, à l'aide de JConsole, etc., utilisez l'URL magique et always include ce fichier JAR.

Pour le reste de cette réponse, supposons que Websphere est installé dans D:\prog\was61.

Pour exécuter JConsole, tapez ce qui suit:

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

Ensuite, allez dans l'onglet "Avancé" et tapez l'URL magique JMX. Appuyez sur Connect et vous devriez voir les MBeans apparaître.

L'utilisation d'un JDK Sun est une toute autre affaire. Vous avez besoin d'un fichier JAR supplémentaire figurant dans la bibliothèque du JDK IBM, mais pas de celui de Sun (ibmorb.jar). Peut-être que la commande suivante peut fonctionner pour vous:

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

Je dis peut-être, parce que cela n'a pas fonctionné pour moi. J'ai reçu un message d'erreur Nice jndiUnavailCommErr, car il attend quelque chose sur le port 2809 pendant que mon installation Websphere écoute sur 2810, bien que j'ai correctement spécifié le port 2810 dans l'URL JMX. Toutefois, si vous adaptez les chemins pour qu'ils pointent vers votre JDK Sun, cela fonctionnera peut-être pour vous. C'est ce qui m'a le plus empêché de me connecter à Websphere à l'aide du JDK de Sun.

Note finale: j'ai essayé une solution basée sur RMI. Un connecteur SOAP est disponible, mais je ne l'ai pas essayé.

Comme toujours avec J2EE, Websphere et d'autres choses: bonne chance, vous en aurez besoin.

32
eljenso

C'est simple. Il suffit de démarrer Websphere avec les paramètres JMX suivants:

-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

Ensuite, démarrez JConsole ou VisualVM et connectez-vous à localhost: 1099

Depuis que je ne suis pas autorisé à poster une capture d'écran de preuve, je poste les informations de l'onglet "overview" de visualvm. 

 PID: 12568
Host: localhost 
 Classe principale: <unknown> 
 Arguments: <aucun> 
 JVM: IBM J9 VM (2.3, J2RE 1.5.0 IBM J9 2.3 Windows XP x86-32 j9vmwi3223-20100808 (JIT activé) 
 J9VM - 20100629_60535_lHdSMr 
 JIT - 20100623_16197_r8 
 GC - 20100211_AA) 
 J
Java Home: C:\Program Files\IBM\SDP\runtimes\base_v61\Java\jre 
 Indicateurs JVM: <aucun> 
 Transfert de tas sur OOME: désactivé 
9
Robert Höglund

C’est peut-être un peu décalé, mais j’ai trouvé un moyen de me connecter au serveur WAS 7.0 JMX à partir de JConsole . Aucune configuration de serveur n’est requise, aucun AppClient, uniquement des fichiers JAR et un petit programme client.

Utilisez le script suivant

@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 la sécurité administrative du serveur cible est désactivée, commentez les lignes CLIENTSAS et PROVIDER. 

Si la sécurité est activée, vous devez également placer le fichier sas.client.props dans le répertoire THIS_DIR. Le fichier de modèle se trouve dans le répertoire WAS_profile\properties. Vous devrez faire un peu d'installation. Voici un extrait de mon 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

D'ACCORD :)

Après la connexion, la fenêtre de connexion apparaîtra. Tapez votre utilisateur administrateur et votre mot de passe (l'utilisateur & pw ne sont pas requis dans la boîte de dialogue de connexion dans JConsole)

Vous pouvez exécuter la JConsole à partir du JDK IBM ou du JDK Sun. Pour IBM, aucune autre configuration n'est requise. Toutefois, pour Sun, vous devrez peut-être placer le fichier orb.properties dans votre répertoire personnel. Le fichier se trouve dans com.ibm.ws.ejb.thinclient_7.0.0.jar. 

6
Boguś

Je ne pouvais pas faire fonctionner ça. Tout ce que j'ai été 

La connexion à nomutilisateur @ service: jmx: iiop // localhost: 2809/jndi/JMXConnector n'a pas abouti. Voudriez-vous essayer à nouveau?

Je l’ai cependant fait fonctionner en procédant comme suit:

  1. Ajoutez "-Djavax.management.builder.initial = -Dcom.Sun.management.jmxremote" à l'argument générique JVM.
  2. Ajoutez ces lignes à 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.

Mais aucun des mbeans utiles n'apparaissent ..?

5
Tommy

J'ai constaté que pour me connecter à WAS 6.1 à l'aide de Sun JDK JConsole, en plus du fichier JAR com.ibm.ws.admin.client_6.1.0.jar, je devais également inclure les 3 JAR suivants dans le chemin de classe de démarrage lors du démarrage de JConsole: -

ibmorbapi.jar
ibmorb.jar
ibmcfw.jar

Ceux-ci peuvent être trouvés dans le répertoire Java\jre\lib de websphere.

Par exemple, sous Windows, si vous copiez les quatre fichiers JAR énumérés ci-dessus dans un répertoire de votre choix (je les ai copiés dans C:\packages\was61-jmx dans l'exemple ci-dessous), vous pouvez utiliser un fichier de commandes comme suit pour démarrer 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%

Cela a fonctionné pour moi avec les versions jdk 1.5 et 1.6 de Sun Jconsole.

4
Alan Chan

J'ai également lutté pendant quelques heures pour que cela fonctionne et j'ai trouvé la solution. Le problème clé est ici SSL - le client doit utiliser les clés appropriées pour établir une connexion SSL au serveur. Cela implique de pointer sur l'emplacement et le mot de passe corrects du Trust Store, comme décrit ici . Le meilleur moyen de configurer l'environnement consiste à appeler le fichier setupCmdLine.sh (sur Windoze, il s'agit de setupCmdLine.bat) pour le serveur approprié, puis à appeler jconsole comme suit: 

#!/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
3
Drago Z Kamenov

Vous ne pouvez pas définir les propriétés système requises via la console WAS, car cela ne vous permet pas de spécifier des valeurs vides. Au lieu de cela, vous devez insérer ce qui suit au bas 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"/>
2
Max

Vous pouvez trouver le bon port de connexion sur WebSphere Application Server sous Communications -> Ports. Le port associé à BOOTSTRAP_ADDRESS vous permet de vous connecter.

1
tjg184

Regardez la méthode simple suivante pour connecter jconsole à Websphere 6.1

Cela fonctionne pour moi (Solaris, Was 6.1, Sun JVM), il fonctionne également avec Visual VM

Prendre plaisir !

1
Jérémie

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

  1. Connectez-vous à console d’administration de la sphère Web, quel que soit le profil (serveur), le raccourci sera disponible dans les programmes du menu Démarrer.

    • Déployez l'application PerfServletApp.ear si elle n'est pas déjà déployée.
    • Vérifiez si PerfServletApp.ear est déployé:
      • Exapnd Applications +> Types d'application +> Applications WebSphere Enterpise
      • Sinon, cliquez sur Nouvelle application
    • Parcourez le répertoire WebSphere -> AppServer -> InstallableApps.
    • (SUIS LES ÉTAPES.)
  2. Activer les données PMI et définir toutes les statistiques activées.

    • Dans le volet de gauche (en bas), accédez à Monitoring and Tuning +> PMI (Performance Monitoring Infrastructure)
    • Dans l'onglet Configuration, activez le PMI.
    • Dans cet onglet Configuration et l'onglet Exécution, définissez Toutes les statistiques. Puis Save change.
  3. Définir l'argument de la machine virtuelle Java

    • Dans Severs +> Types de serveur +> Serveurs d'applications WebSphere, puis -> [nom du serveur] +> Définition du processus -> Java Virtual Machine
    • Définissez l’argument jvm générique pour inclure

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

    in affiche la liste des serveurs. Cliquez sur le serveur que vous voulez.

    • Dans le volet de droite -> Infrastructure du serveur -> Java et gestion des processus, cliquez sur la définition de Process, à nouveau dans l'onglet Propriétés supplémentaires de Configuration cliquez sur Java Machine virtuelle. mettez le -Djavax.management.builder.initial= -Dcom.Sun.management.jmxremote dans les modifications de arguments génériques Jvm et save.
  4. Pour activer le port distant JMX, ouvrez le fichier de propriétés suivant et ajoutez le code suivant: . Dans [répertoire_WebSphere]\AppServer\Java\jre\lib\management\management.properties, ajoutez:

    com.Sun.management.jmxremote.port=9001
    com.Sun.management.jmxremote.ssl=false
    com.Sun.management.jmxremote.authenticate=false
    
  5. Enregistrez les données de base, arrêtez le serveur et démarrez le serveur pour charger les modifications.

1
qxo

vous pouvez essayer ce qui suit, il utilise l’adaptateur de protocole SOAP. Je pense que c'est aussi maigre une configuration possible.

#!/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

Remerciements à mon collègue Jeroen pour la version initiale du script utilisant IIOP (j'essaie SOAP dans l'espoir que cela fonctionnera avec Hyperic)

0
Eddy

D'accord. Il existe deux méthodes pour ce faire: Une en utilisant le connecteur SOAPone en utilisant le connecteur RMi/IIOP.

Pour SOAP, vous devez configurer WAS pour ajouter un nouveau PORT et les autres arguments JVM décrits ci-dessus. Mais tout ce que vous obtenez une fois que JConsole se connecte au serveur sont des métriques de base JVM.

Avec RMI, vous obtenez tout ce que WebSphere expose. Tous les MBeans! Le seul inconvénient est que: si votre machine virtuelle Java WAS est derrière un pare-feu, vous devez ouvrir un port pour y accéder depuis votre bureau. Mais vous pouvez l'exécuter via X11 directement à partir de l'hôte du serveur d'applications!

J'ai utilisé JDK7 sur mon bureau Windows XP pour me connecter à WAS 7.0 avec la sécurité globale activée . J'ai pris un script de la réponse n ° 4 ci-dessus et je l'ai utilisé comme point de départ ..__en voici ma version. :

@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 est simplement un répertoire contenant les fichiers JAR IBM que j'ai téléchargés à partir de mes fichiers binaires WebSphere (sous Solaris). J'ai également créé deux sous-répertoires sous celui-ci: properties et keystore . Dans les propriétés subdir, j'ai mis mes sas.client.props et ssl.client.props, également téléchargés à partir d'une cellule WAS7 en fonctionnement ( Je l'ai enlevé à un DM) . Dans le sous-magasin de clés, j'ai mis les fichiers key.p12 et trust.p12, également téléchargés à partir d'une cellule WAS7. Assurez-vous qu'ils ont les bons certs! Si ceux de WAS/etc ne fonctionnent pas, essayez ceux de $ {CONFIG_ROOT}/cells /.Modifiez ssl.client.props pour vous assurer que le chemin d'accès aux fichiers p12 est correct!

Maintenant, pour que cela fonctionne, vous devez également télécharger les éléments suivants à partir de vos fichiers binaires WAS:

WAS_BIN_HOME/Java/jre/lib/endorsed

Placez ce répertoire complet sous le répertoire jre/lib de votre JDK Sun. Cela prend en charge les erreurs du fournisseur IBM JSSE2 et autres ..__ également. Obtenez également les trois fichiers suivants à partir de WAS_BIN_HOME/Java/jre/lib/security:

Java.security
local_policy.jar
US_export_policy.jar

Je viens d'écraser celles fournies avec le kit JDK de Sun avec celles que j'ai prises auprès d'IBM.

De même, dans sas.client.props, assurez-vous de saisir l'ID utilisateur et le mot de passe, comme vous le feriez dans soap.client.props. Vous pouvez encoder le mot de passe de la même manière. Cela est nécessaire pour dépasser BasicAuth de Global Security.

Je pense que ça y est . P.S. Je ne suis pas un professionnel de Windows. S'il existe une méthode plus propre, partagez-la.

0
Slava Baytalskiy