Подтвердить что ты не робот

Как включить JMX в Websphere?

Я хотел бы использовать JConsole для мониторинга моего приложения Websphere, но я не уверен, как включить JMX.

4b9b3361

Ответ 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"/>

Ответ 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, поэтому, если есть более чистый способ сделать это, пожалуйста, поделитесь им.