J'aimerais utiliser JConsole pour surveiller mon application Websphere, mais je ne sais pas comment activer JMX.
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.
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é
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.
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:
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 ..?
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.
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
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"/>
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.
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 !
de http://malliktalksjava.in/2010/07/26/enable-jmx-remote-port-in-websphere/
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.
Activer les données PMI et définir toutes les statistiques activées.
Définir l'argument de la machine virtuelle Java
-Djavax.management.builder.initial= -Dcom.Sun.management.jmxremote
in affiche la liste des serveurs. Cliquez sur le serveur que vous voulez.
-Djavax.management.builder.initial= -Dcom.Sun.management.jmxremote
dans les modifications de arguments génériques Jvm et save.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
Enregistrez les données de base, arrêtez le serveur et démarrez le serveur pour charger les modifications.
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)
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.