【问题标题】:How do you enable JMX in Websphere?如何在 Websphere 中启用 JMX?
【发布时间】:2010-09-26 07:19:52
【问题描述】:

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

【问题讨论】:

    标签: java jakarta-ee websphere jmx jconsole


    【解决方案1】:

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

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

      • 如果尚未部署,请部署 PerfServletApp.ear 应用程序。
      • 检查是否部署了 PerfServletApp.ear
        • Exapnd 应用程序 +> 应用程序类型 +> WebSphere Enterprise Applications
        • 如果没有,请单击新建应用程序
      • WebSphere 目录 -> AppServer -> InstallableApps浏览。
      • (按照步骤操作。)
    2. 启用 PMI 数据并启用所有统计信息。

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

      • 服务器 +> 服务器类型 +> WebSphere Application Servers,然后 -> [服务器名称] +> 进程定义 -> Java虚拟机
      • 将通用 jvm 参数设置为包含

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

      in 显示服务器列表。点击你想要的服务器。

      • 在右侧窗格中 -> Server Infrastructure -> Java and Process Management 点击 Process 定义,再次在 Additional Properties 中>配置标签 点击 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. 保存主数据,停止服务器,然后启动服务器以加载更改。

    【讨论】:

      【解决方案2】:

      好的。有两种方法可以做到这一点: 一种使用 SOAP 连接器 一个使用 RMi/IIOP 连接器。

      对于 SOAP,您需要进行 WAS 设置以添加新的 PORT 和上述其他 JVM 参数。但是一旦 JConsole 连接到服务器,您得到的只是基本的 JVM 指标。

      使用 RMI,您可以获得 WebSphere 公开的所有内容。所有的 MBean! 唯一需要注意的是:如果您的 WAS JVM 在防火墙后面 - 您需要打开一个端口才能从您的桌面访问它。但是您可以通过 X11 直接在应用服务器主机上运行它!

      我在我的 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 的目录。我还在下面创建了两个子目录:propertieskeystore。 在属性子目录中,我放置了我的 sas.client.props 和 ssl.client.props,它们也是从工作中的 WAS7 单元下载的(我从 DM 中取出了它)。 在密钥库子目录中,我放置了同样从 WAS7 单元下载的 key.p12 和 trust.p12 文件。确保他们拥有正确的证书!如果 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 专业人士,所以如果有更简洁的方法可以做到这一点 - 请分享。

      【讨论】:

        【解决方案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
        

        【讨论】:

          【解决方案4】:

          以下信息适用于 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 的库中,但不是 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 就像一个魅力。我很抱歉你必须经历的痛苦:)
          • +1 表示“祝你好运,你会需要它”...顺便说一句,我有带有对象的树,但由于 ADMN0022E(缺少权限或其他原因)我看不到属性像那样)有什么想法吗?
          • 您可能还需要使用 IBM jconsole 将 jconsole.jar 添加到类路径中。
          • “神奇的 URL”service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi 为我工作
          • 我做了所有这些,仍然没有工作。我得到了 MBeans 选项卡,但没有内存。
          【解决方案5】:

          这很简单。只需使用以下 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 主机:本地主机 主类: 参数: JVM:IBM J9 VM(2.3、J2RE 1.5.0 IBM J9 2.3 Windows XP x86-32 j9vmwi3223-20100808(启用 JIT) J9VM - 20100629_60535_lHdSMr JIT - 20100623_16197_r8 GC-20100211_AA) Java:版本 1.5.0,供应商 IBM Corporation Java 主页:C:\Program Files\IBM\SDP\runtimes\base_v61\java\jre JVM 标志: OOME 上的堆转储:已禁用

          【讨论】:

          • 这种方式对我有用,我必须在Servers/Application servers/server1/Java y gestión de procesos/Definición de proceso/Máquina virtual Java/Argumentos de JVM genéricos 下的 websphere 控制台中添加这些相同的参数(对不起,这是西班牙语,我也更喜欢英文版,但 ibm 必须有人以为我们以西班牙语为母语的人更喜欢糟糕的翻译)。希望这对某人有所帮助
          • 其实这样不行。我通过将这些参数添加到 startServer.sh 文件中的 D_ARGS 选项来尝试它。然后,在 1099 上连接,它只显示 websphere 管理进程的数据,不显示包含的应用程序进程的信息。
          • 因为 WebSphere 在 IBM JDK 上运行,因此 com.sun.* 中的包不存在,所以它不起作用是有道理的,对吧?
          • 为我工作...请注意,在 -Djavax.management.builder.initial= 之后添加 SPACE
          【解决方案6】:

          你可以试试下面的,它使用了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 使用 IIOP 编写脚本的初始版本(我正在尝试 SOAP,希望它能与 Hyperic 一起使用)

          【讨论】:

            【解决方案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】:

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

              【讨论】:

                【解决方案9】:

                也许这有点离题,但我找到了一种从 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 中找到。

                【讨论】:

                  【解决方案10】:

                  我发现为了使用 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。

                  【讨论】:

                    【解决方案11】:

                    我无法让它工作。我得到的只是

                    与 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
                    com.sun.management.jmxremote.port=9999 com.sun.management.jmxremote.authenticate=false com.sun.management.jmxremote.ssl=false

                    但是没有一个有用的 mbean 出现..?

                    【讨论】:

                    • @Tommy - 你有没有得到“有趣”的东西?我的意思是没有整个额外的罐子/IIOP mumbo-jumbo...
                    • @Chris 不,从来没有像我想要的那样工作。最终使用 WAS 附带的 PMI servlet,然后解析 xml 并用 Munin 绘制它。工作正常
                    【解决方案12】:

                    看下面simple method to connect jconsole to Websphere 6.1

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

                    享受吧!

                    【讨论】:

                    • 您仍然可以使用此解决方案访问 WebSphere JMX bean,以获取有关 servlet 和连接池的信息吗?
                    • 链接在这里并且方法有效:ecovations.de/blog/?p=99。虽然无法从远程 jconsole 连接...不知道为什么。仅限本地控制台。
                    猜你喜欢
                    • 1970-01-01
                    • 2015-02-18
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2013-03-07
                    • 2011-08-09
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多