Я хотел бы использовать JConsole для мониторинга моего приложения Websphere, но я не уверен, как включить JMX.
Как включить JMX в Websphere?
Ответ 1
Следующая информация относится к Websphere 6.1 в Windows.
Прежде всего, волшебный URL-адрес для подключения к серверу MBean:
service:jmx:iiop://<host>:<port>/jndi/JMXConnector
Если у вас установлена установка по умолчанию для Websphere, номер порта JNDI, вероятно, будет 2809, 2810,... в зависимости от того, сколько серверов установлено на одной системе и на конкретную, к которой вы хотите подключиться. Разумеется, при запуске Websphere проверьте журналы, так как он будет выгружать строку, например
0000000a RMIConnectorC A ADMC0026I: The RMI Connector is available at port 2810
Если вы не получите эту строку, откройте консоль администратора Websphere и перейдите к
Серверы приложений > server1 > Службы администрирования > JMX разъемы
чтобы увидеть, нужно ли вам добавлять или изменять конфигурацию.
Второй важный бит информации заключается в том, что при выполнении JMX с сервером всегда нужен следующий JAR:
com.ibm.ws.admin.client_6.1.0.jar
Этот JAR можно найти в каталоге runtimes
Websphere. Что бы вы ни делали, будь то программный доступ к MBeans в Websphere или использование JConsole и т.д., Используйте магический URL и всегда включить этот JAR.
В оставшейся части этого ответа предположим, что Websphere установлен в D:\prog\was61.
Чтобы запустить JConsole, введите следующее:
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
Затем перейдите на вкладку "Дополнительно" и введите магический URL JMX. Нажмите connect, и вы увидите, как отображаются MBeans.
Использование Sun JDK - совсем другое дело. Вам нужен один дополнительный JAR, который находится в lib IBM JDK, но не Sun (ibmorb.jar), и, возможно, для вас может работать следующая команда:
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
Я говорю, может быть, потому что это не сработало для меня. Я получил сообщение об ошибке jndiUnavailCommErr, так как он ожидал чего-то на порту 2809, в то время как моя установка Websphere прослушивает 2810, хотя я правильно указал порт 2810 в URL JMX. Но, если вы адаптируете пути к вашему Sun JDK, это может сработать для вас. Это самый близкий я когда-либо подключался к Websphere, используя Sun JDK.
Заключительное примечание: я попробовал решение на основе RMI, есть также SOAP-разъем, но он не пробовал его.
Как всегда с J2EE, Websphere и т.д.: удачи, вам понадобится.
Ответ 2
Это просто. Просто запустите Websphere со следующими параметрами 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
Затем запустите JConsole или VisualVM и подключитесь к localhost: 1099
Так как мне не разрешено публиковать скриншот с доказательством, я публикую информацию из 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
Ответ 3
Может быть, это немного оффтопик, но я нашел способ подключиться к WAS 7.0 JMX-серверу от JConsole. Настройка сервера не требуется, нет AppClient, только некоторые JAR и небольшая настройка клиента.
Используйте следующий script
@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%
Если целевой сервер отключен административной безопасностью, закомментируйте строки CLIENTSAS и PROVIDER.
Если защита включена, вам также понадобится файл sas.client.props, который будет помещен в каталог THIS_DIR. Файл шаблона можно найти в каталоге WAS_profile\properties. Вам нужно будет немного настроить. Вот отрывок из моего 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
ОК:)
После подключения появится всплывающее окно входа. Введите пользователя и пароль администратора (пользователь и pw не требуются в диалоговом окне подключения в JConsole)
Вы можете запустить JConsole из IBM JDK или Sun JDK. Для IBM никакой другой установки не требуется. Однако для Sun вам может понадобиться поместить файл orb.properties в ваш домашний каталог. Файл можно найти в com.ibm.ws.ejb.thinclient_7.0.0.jar.
Ответ 4
Я не мог заставить это работать. Все, что я получил, было
Соединение с именем пользователя @service: jmx: iiop//localhost: 2809/jndi/JMXConnector не удалось. Хотите попробовать еще раз?
Однако я сделал это, выполнив следующие действия:
- Добавить "-Djavax.management.builder.initial = -Dcom.sun.management.jmxremote" в общий аргумент JVM.
- Добавьте эти строки в 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
Но ни один из полезных мейбов не появляется.?
Ответ 5
Я обнаружил, что для подключения к WAS 6.1 с использованием Sun JDK JConsole в дополнение к файлу com.ibm.ws.admin.client_6.1.0.jar
JAR, я должен был также включить следующие три JAR файла в путь к загрузочному классу при запуске JConsole: -
ibmorbapi.jar
ibmorb.jar
ibmcfw.jar
Они могут быть найдены в каталоге java\jre\lib websphere.
Например, в окнах, если вы скопируете все перечисленные выше четыре JAR в каталог по вашему выбору (я скопировал их в C:\packages\was61-jmx в приведенном ниже примере), вы можете использовать пакетный файл например, для запуска 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%
Это работало для меня для версий jdk 1.5 и 1.6 Sun Jconsole.
Ответ 6
Я также боролся в течение нескольких часов, чтобы заставить это работать, и я нашел решение. Ключевой проблемой здесь является SSL - клиент должен использовать соответствующие ключи для установления SSL-соединения с сервером. Это включает указание правильного местоположения хранилища доверия и пароля хранилища доверия, как описано here. Лучший способ настроить среду - вызвать setupCmdLine.sh(на Windoze это setupCmdLine.bat) для соответствующего сервера, а затем вызвать jconsole следующим образом:
#!/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
Ответ 7
Вы не можете установить необходимые системные свойства через консоль WAS, так как это не позволяет указать пустые значения. Вместо этого вам нужно вставить следующее внизу "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"/>
Ответ 8
Посмотрите следующий простой способ подключения jconsole к Websphere 6.1
Это работает для меня (Solaris, Was 6.1, Sun JVM), он также работает с Visual VM
Наслаждайтесь!
Ответ 9
Вы можете найти правильный порт для подключения к серверу приложений WebSphere в разделе Communications → Ports. Порт, связанный с BOOTSTRAP_ADDRESS, позволяет вам подключаться.
Ответ 10
из http://malliktalksjava.in/2010/07/26/enable-jmx-remote-port-in-websphere/
-
Войдите в консоль администратора веб-сферы, любой профиль (сервер), сокращение будет доступно в программах начального меню.
- Разверните приложение PerfServletApp.ear, если оно еще не развернуто.
- Проверьте, установлено ли PerfServletApp.ear:
- Exapnd Приложения + > Типы приложений + > Приложения WebSphere Enterpise
- Если нет, нажмите Новое приложение.
- Просмотр из каталога WebSphere → AppServer → InstallableApps.
- (ПОСЛЕДУЮЩИЕ ШАГИ.)
-
Включить данные PMI и включить все статистические данные.
- В левой панели (внизу) перейдите в Мониторинг и настройка + > Инфраструктура мониторинга производительности (PMI)
- На вкладке "Конфигурация" включите PMI.
- На вкладке "Конфигурация" и вкладке "Время выполнения" установите Все статистики. Затем Сохранить.
-
Задайте аргумент JVM
- В Severs + > Типы серверов + > Серверы приложений WebSphere, затем → [имя-сервера] → Определение процесса → Виртуальная машина Java
- Задайте общий аргумент jvm для включения
-Djavax.management.builder.initial= -Dcom.sun.management.jmxremote
показывает список серверов. нажмите на желаемый сервер.
- В правой панели → Инфраструктура сервера → Управление Java и процессами выберите Процесс, еще раз в Дополнительные свойства Конфигурация
нажмите виртуальная машина Java. введите
-Djavax.management.builder.initial= -Dcom.sun.management.jmxremote
в поле "Общие аргументы Jvm" и сохранить.
-
Чтобы включить удаленный порт JMX, откройте следующий файл свойств и добавьте следующий код. В [WebSphere-directory]\AppServer\java\jre\lib\management\management.properties добавьте:
com.sun.management.jmxremote.port=9001 com.sun.management.jmxremote.ssl=false com.sun.management.jmxremote.authenticate=false
-
Сохраните основные данные, остановите сервер и запустите сервер для загрузки изменений.
Ответ 11
вы можете попробовать следующее: в нем используется адаптер протокола SOAP. Я думаю, что это может быть скудной конфигурацией.
#!/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
Кредиты моему коллеге Jeroen для начальной версии script с использованием IIOP (я пытаюсь использовать SOAP в надежде, что он будет работать с Hyperic)
Ответ 12
Ok. Есть два способа сделать это: один с использованием SOAP-коннектора один с помощью разъема RMi/IIOP.
Для SOAP вам нужно выполнить настройку WAS, чтобы добавить новый PORT и другие аргументы JVM, описанные выше. Но все, что вы получаете, когда JConsole подключается к серверу, - это основные показатели JVM.
С RMI вы получаете все, что предоставляет WebSphere. Все MBeans! Единственное предостережение: если ваша WAV JVM находится за брандмауэром - вам нужно открыть порт, чтобы добраться до него со своего рабочего стола. Но вы можете запустить это через X11 сразу же с сервера сервера приложений!
Я использовал JDK7 на рабочем столе Windows XP для подключения к WAS 7.0 с включенной глобальной безопасностью. Я взял script из ответа № 4 выше и использовал его в качестве отправной точки. Вот моя версия:
@echo off
set HOST=<put hostname here>
set PORT=<put JVM 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 - это просто каталог, в котором у меня есть те JAR IBM, которые я загрузил из своих двоичных файлов WebSphere (от Solaris). Я также создал два поддиректа: свойства и keystore. В свойствах subdir я помещаю свои sas.client.props и ssl.client.props, также загруженные из рабочей ячейки WAS7 (я снял ее с DM). В поддиректории хранилища ключей я помещаю файлы key.p12 и trust.p12, также загружаемые из ячейки WAS7. Удостоверьтесь, что у них есть правильные сертификаты! Если те из WAS/etc не работают - попробуйте те из ${CONFIG_ROOT}/cells/. Изменить ssl.client.props, чтобы убедиться, что путь к файлам p12 верен!
Теперь, для того, чтобы это сработало, вам также нужно загрузить следующее из ваших двоичных файлов WAS:
WAS_BIN_HOME/java/jre/lib/endorsed
Поместите весь этот каталог в каталог SUN JDK jre/lib. Это касается ошибок IBM JSSE2 Provider и тому подобного. Кроме того, получите следующие три файла из WAS_BIN_HOME/java/jre/lib/security:
java.security
local_policy.jar
US_export_policy.jar
Я просто переписал те, что пришли с SUN JDK, с теми, которые я взял от IBM.
Кроме того, в sas.client.props обязательно введите идентификатор пользователя и пароль, аналогично тому, как это делается в файле soap.client.props. Вы можете закодировать пароль таким же образом. Это необходимо для прохождения Global Security BasicAuth.
Я думаю, что это так. Постскриптум Я не профессионал Windows, поэтому, если есть более чистый способ сделать это, пожалуйста, поделитесь им.