[英]How do you enable JMX in Websphere?
我想使用JConsole來監視我的Websphere應用程序,但我不知道如何啟用JMX。
以下信息適用於Windows上的Websphere 6.1。
首先,連接到MBean服務器的神奇URL是:
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
您可以在Websphere的runtimes
目錄中找到此JAR。 無論您做什么,無論是以編程方式訪問Websphere上的MBean,還是使用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
然后轉到“高級”選項卡並輸入魔術JMX URL。 按連接,您應該看到MBean出現。
使用Sun JDK是一個完全不同的問題。 您需要一個額外的JAR,它位於IBM JDK的lib中,而不是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錯誤消息,因為當我的Websphere安裝正在監聽2810時,它期望端口2809上的某些內容,盡管我在JMX URL中正確指定了端口2810。 但是,如果您調整路徑以指向Sun JDK,它可能適合您。 這是我使用Sun的JDK連接到Websphere的最接近的。
最后說明:我嘗試了基於RMI的解決方案,還有一個SOAP連接器可用,但還沒有嘗試過。
和J2EE,Websphere一樣:好運,你需要它。
很簡單。 只需使用以下JMX參數啟動Websphere:
-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
也許它有點偏離主題,但我找到了一種從JConsole連接到WAS 7.0 JMX服務器的方法。 不需要服務器設置,沒有AppClient,只有一些JAR和一些小客戶端設置。
使用以下腳本
@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
好 :)
連接后,將出現登錄彈出窗口。 輸入您的管理員用戶和密碼(JConsole中的連接對話框中不需要用戶和密碼)
您可以從IBM JDK或Sun JDK運行JConsole。 對於IBM,不需要其他設置。 但是,對於Sun,您可能需要將orb.properties文件放在主目錄中。 該文件可以在com.ibm.ws.ejb.thinclient_7.0.0.jar中找到。
我無法讓這個工作。 我得到的只是
與username @ service:jmx:iiop // localhost:2809 / jndi / JMXConnector的連接未成功。 你想再試一次嗎?
然而,我做了以下工作:
com.sun.management.jmxremote.port=9999 com.sun.management.jmxremote.authenticate=false com.sun.management.jmxremote.ssl=false
但沒有一個有用的mbeans出現..?
我發現為了使用Sun JDK JConsole連接到WAS 6.1,除了com.ibm.ws.admin.client_6.1.0.jar
JAR文件之外,我還必須在引導類路徑中包含以下3個JAR啟動JConsole時: -
ibmorbapi.jar
ibmorb.jar
ibmcfw.jar
這些可以在websphere的java \\ jre \\ lib目錄中找到。
例如,在Windows上,如果將上面列出的所有四個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。
我也掙扎了幾個小時才能讓它工作,我找到了解決方案。 關鍵問題在於SSL - 客戶端必須使用正確的密鑰來建立與服務器的SSL連接。 這包括描述指向正確的信任存儲位置和信任存儲密碼這里 。 設置環境的最佳方法是為相關服務器調用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
來自http://malliktalksjava.in/2010/07/26/enable-jmx-remote-port-in-websphere/
登錄到Web球體的管理控制台任何配置文件(服務器),快捷方式將在開始菜單程序中可用。
啟用PMI數據並設置啟用的所有統計信息。
設置JVM參數
-Djavax.management.builder.initial= -Dcom.sun.management.jmxremote
in顯示服務器列表。 單擊您想要的服務器。
-Djavax.management.builder.initial= -Dcom.sun.management.jmxremote
放在Generic Jvm Argument字段中並保存更改。 要啟用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
保存主數據,停止服務器,然后啟動服務器以加載更改。
您無法通過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"/>
您可以在Communications - > Ports下的WebSphere Application Server上找到要連接的正確端口。 與BOOTSTRAP_ADDRESS關聯的端口允許您連接。
好。 有兩種方法可以做到這一點:一種使用SOAP連接器,一種使用RMi / IIOP連接器。
對於SOAP,您需要進行WAS設置以添加上面描述的新PORT和其他JVM參數。 但是,一旦JConsole連接到服務器,您獲得的只是基本的JVM指標。
使用RMI,您可以獲得WebSphere公開的所有內容。 所有MBeans! 唯一需要注意的是:如果您的WAS JVM位於防火牆后面 - 您需要打開一個端口才能從桌面訪問它。 但你可以通過X11直接在app服務器主機上運行它!
我在Windows XP桌面上使用JDK7連接到啟用了全局安全性的WAS 7.0。 我從上面的答案#4中獲取了一個腳本並將其用作起點。 這是我的版本:
@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只是一個目錄,其中包含我從WebSphere二進制文件(Solaris之外)下載的那些IBM JAR。 我還在那里創建了兩個子目錄: properties和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
我剛剛用IBM的那些來覆蓋SUN的JDK附帶的那些。
此外,在sas.client.props中,請務必輸入用戶ID和密碼,類似於您在soap.client.props中的操作方式。 您可以用相同的方式對密碼進行編碼。 這需要通過Global Security的BasicAuth。
我想就是這樣。 PS我不是Windows專業版,所以如果有更簡潔的方法 - 請分享。
您可以嘗試以下操作,它使用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
使用IIOP向我的同事Jeroen致信腳本的初始版本(我正在嘗試使用SOAP,希望它可以與Hyperic一起使用)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.