如何在Websphere中启用JMX?

时间:2008-12-10 18:39:02

标签: java java-ee websphere jmx jconsole

我想使用JConsole来监控我的Websphere应用程序,但我不知道如何启用JMX。

12 个答案:

答案 0 :(得分:32)

以下信息适用于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管理控制台并转到

  

应用程序服务器&gt; server1&gt;   行政服务&gt; 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和其他东西一样:祝你好运,你需要它。

答案 1 :(得分:9)

很简单。只需使用以下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

答案 2 :(得分:6)

也许它有点偏离主题,但我找到了一种从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中的连接对话框中不需要用户和pw)

您可以从IBM JDK或Sun JDK运行JConsole。对于IBM,不需要其他设置。但是,对于Sun,您可能需要将orb.properties文件放在主目录中。该文件可以在com.ibm.ws.ejb.thinclient_7.0.0.jar中找到。

答案 3 :(得分:5)

我无法让它发挥作用。我得到的只是

  

与username @ service:jmx:iiop // localhost:2809 / jndi / JMXConnector的连接未成功。你想再试一次吗?

但是我做了以下工作让它发挥作用:

  1. 将“-Djavax.management.builder.initial = -Dcom.sun.management.jmxremote”添加到通用JVM参数中。
  2. 将这些行添加到WebSphere / AppServer / java / jre / lib / management / management.properties
  3. com.sun.management.jmxremote.port=9999
    com.sun.management.jmxremote.authenticate=false
    com.sun.management.jmxremote.ssl=false
    

    但没有一个有用的mbeans出现..?

答案 4 :(得分:4)

我发现为了使用Sun JDK JConsole连接到WAS 6.1,除了com.ibm.ws.admin.client_6.1.0.jar JAR文件之外,我还必须在启动JConsole时在引导类路径中包含以下3个JAR: -

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。

答案 5 :(得分:3)

我也挣扎了几个小时才能让它工作,我找到了解决方案。关键问题在于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

答案 6 :(得分:2)

您无法通过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"/>

答案 7 :(得分:2)

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

  1. 登录网络领域的管理控制台任何配置文件(服务器),快捷方式将在开始菜单程序中可用。

    • 部署 PerfServletApp.ear 应用程序(如果尚未部署)。
    • 检查是否部署了 PerfServletApp.ear
      • Exapnd 应用 +&gt; 申请类型 +&gt; WebSphere Enterpise应用程序
      • 如果没有,请点击新应用
    • 浏览 WebSphere目录 - &gt; AppServer - &gt;的 InstallableApps 即可。
    • (遵循步骤。)
  2. 启用PMI数据并设置所有已启用的统计信息。

    • 在左侧窗格(底部)中,转到监控和调整 +&gt; 性能监控基础架构(PMI)
    • 配置标签中,启用 PMI
    • 在此配置标签和运行时标签中,设置所有统计信息。然后保存更改。
  3. 设置JVM参数

    • 服务器 +&gt;中服务器类型 +&gt; WebSphere Application Server ,然后 - &gt; [服务器名称] +&gt; 流程定义 - &gt; Java虚拟机
    • 将通用jvm参数设置为include
        

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

    显示服务器列表。单击您想要的服务器。

    • 在右侧窗格中 - &gt; 服务器基础架构 - &gt; Java和流程管理再次在配置标签的其他属性中点击流程定义 单击 Java虚拟机。将-Djavax.management.builder.initial= -Dcom.sun.management.jmxremote放在 Generic Jvm Argument 字段中 和保存更改。
  4. 要启用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
    
  5. 保存主数据,停止服务器,然后启动服务器以加载更改。

答案 8 :(得分:1)

请查看以下simple method to connect jconsole to Websphere 6.1

它适用于我(Solaris,Was 6.1,Sun JVM),它也适用于Visual VM

享受!

答案 9 :(得分:1)

您可以在Communications - &gt;下的WebSphere Application Server上找到要连接的正确端口。端口。与BOOTSTRAP_ADDRESS关联的端口允许您连接。

答案 10 :(得分:0)

您可以尝试以下操作,它使用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一起使用)

答案 11 :(得分:0)

确定。有两种方法可以做到这一点: 一个使用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的目录。我还在其下创建了两个子目录:属性密钥库。 在属性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。

我认为就是这样。 附:我不是Windows专业版,所以如果有更简洁的方法 - 请分享。