0

我想使用 Java Mission Control 监控我们在 WebLogic 10.3.6 上托管的 Web 应用程序的性能。我正在密切关注Java One 2013关于 Java Mission Control 的演讲中讨论的过程。

当我尝试开始飞行记录时,我收到一条错误消息:

在此处输入图像描述

据我所知,我已经设置了正确的 Java 命令行参数等。我的 Java 是:

java version "1.7.0_40"
Java(TM) SE Runtime Environment (build 1.7.0_40-b43)
Java HotSpot(TM) 64-Bit Server VM (build 24.0-b56, mixed mode)

我按如下方式启动 WebLogic:

C:\dev\dev-tools\Glassfish\jdk7\bin\java
-client
-Xms512m
-Xmx1024m
-XX:CompileThreshold=8000
-XX:PermSize=512m
-XX:MaxPermSize=512m
-Dweblogic.Name=AdminServer
-Djava.security.policy=C:\dev\servers\Oracle\WLS_10~1.6\WLSERV~1.3\server\lib\weblogic.policy
-Djava.net.preferIPv4Stack=true
-Xms2048m
-Xmx4096m
-XX:CompileThreshold=8000
-XX:PermSize=1024m
-XX:MaxPermSize=1536m
-verbose:gc
-XX:+PrintGCTimeStamps
-XX:+PrintGCDetails
-Xloggc:C:/Temp/gcsVBMS.txt
-XX:+PrintTenuringDistribution
-XX:-HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=c:\Temp\dump.hprof
    -XX:+UnlockCommercialFeatures
    -XX:+FlightRecorder
    -Dcom.sun.management.jmxremote.authenticate=false
    -Dcom.sun.management.jmxremote.ssl=false
-Xverify:none
-da
-Djavax.net.ssl.keyStore=XXX
-Djavax.net.ssl.keyStorePassword=jvmpassword
-Djavax.net.ssl.trustStore=XXX
-Djavax.net.ssl.keyStore=XXX
-Djavax.net.ssl.keyStorePassword=jvmpassword
-Djavax.net.ssl.trustStore=XXX
-Dplatform.home=C:\dev\servers\Oracle\WLS_10~1.6\WLSERV~1.3
-Dwls.home=C:\dev\servers\Oracle\WLS_10~1.6\WLSERV~1.3\server
-Dweblogic.home=C:\dev\servers\Oracle\WLS_10~1.6\WLSERV~1.3\server
-Dweblogic.management.discover=true
-Dwlw.iterativeDev=
-Dwlw.testConsole=
-Dwlw.logErrorsToConsole=
-Dweblogic.ext.dirs=C:\dev\servers\Oracle\WLS_10~1.6\patch_wls1036\profiles\default\sysext_manifest_classpath;C:\dev\servers\Oracle\WLS_10~1.6\patch_ocp371\profiles\default\sysext_manifest_classpath
weblogic.Server

我认为 jmc 应该能够自动连接到发现的 JVM,因为我已经提供了推荐的 Java 参数(如上缩进)。我需要做什么才能使其正常工作?

4

3 回答 3

1

希望您已经在其他地方得到了答案,但如果没有:

如果我猜,问题与您机器的网络配置有关,您可以尝试添加 -Djava.rmi.server.hostname=localhost 或 -Djava.rmi.server.hostname=

您还可以添加 -Dcom.sun.management.jmxremote.port=

并创建与 localhost: 或的自定义连接:

// Klara,Java 任务控制开发

于 2014-04-15T09:48:54.697 回答
1

我需要所有这些参数来运行我的集成 Weblogic,它捆绑在 Jdeveloper 中:

-Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.port=8999 
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false 
-XX:+UnlockCommercialFeatures 
-XX:+FlightRecorder
于 2015-06-10T18:35:13.273 回答
1

注意生产系统上的这些选项

-Dcom.sun.management.jmxremote.port=8999 
-Dcom.sun.management.jmxremote.ssl=false

请记住,根据 Java 文档,这可以执行任意源代码,如下所示:

禁用安全性

要同时禁用密码验证和 SSL(即禁用所有安全性),您应该在启动 Java VM 时设置以下系统属性。

com.sun.management.jmxremote.authenticate=false

com.sun.management.jmxremote.ssl=false

注意 -此配置不安全:任何知道(或猜测)您的端口号和主机名的远程用户都将能够监视和控制您的 Java 应用程序和平台。此外,可能的危害不仅限于您在 MBean 中定义的操作。远程客户端可以创建 javax.management.loading.MLet MBean 并使用它从任意 URL 创建新的 MBean,至少在没有安全管理器的情况下是这样。换句话说,恶意远程客户端可以使您的 Java 应用程序执行任意代码。因此,虽然禁用安全性对于开发可能是可以接受的,但强烈建议您不要禁用生产系统的安全性。

来源:https ://docs.oracle.com/javase/7/docs/technotes/guides/management/agent.html

我相信以安全方式使用它的最佳方法是使用本文档中公开的 2-way SSL:

https://www.ibm.com/support/knowledgecenter/en/SSJJ9R_5.0.1/com.ibm.jazz.repository.web.admin.doc/topics/t_server_mon_tomcat_option3.html

设置客户端 SSL 身份验证

从这一点来看,完整的 SSL 安全解决方案要求您还激活客户端级 SSL 身份验证。关于此任务 您可以将 JMX 的客户端身份验证配置为基于 SSL 证书。以下示例显示如何将 JConsole 配置为基于 SSL 证书。您可以使用类似的步骤来配置任何其他客户端。作为指导,此配置的一般步骤如下: 为客户端和服务器创建 SSL 密钥库和信任库。在每一侧导出证书。在服务器级别和客户端级别交换和导入证书。与 CLM 捆绑在一起的 Apache Tomcat 服务器有一个密钥库,前面的说明显示了如何导出证书并将其导入客户端。以下步骤显示了为 JConsole 实现客户端身份验证的其余配置。为了清楚起见,示例中使用了示例值和自签名证书;您应该根据您的环境政策调整它们。

程序

要为 JConsole 创建密钥库,请打开命令提示符,然后转到 JazzInstallDir/server/jre/bin 并输入以下命令:

keytool -genkey -alias jconsole -keyalg RSA -validity 365 -keystore jconsole.keystore -storepass 密码 -keypass 密码

输入以下命令从 JConsole 导出证书: keytool -export -alias jconsole -keystore jconsole.keystore -file client.cer -storepass password

输入以下命令以导入 Apache Tomcat 信任库。该命令生成一个新的信任库: keytool -import -alias jconsole-ibm-team -file client.cer -keystore ibm-team-ssl.truststore -storepass ibm-team -noprompt

要使用信任库配置服务器,请将相关属性添加到 server.startup 文件中,以及之前 SSL 配置的属性: Linux:

JAVA_OPTS="$JAVA_OPTS -Djavax.net.ssl.trustStore=path_to_the_trust_store/ibm-team-ssl.truststore" JAVA_OPTS="$JAVA_OPTS -Djavax.net.ssl.trustStorePassword=ibm-team"

微软Windows:

JAVA_OPTS=%JAVA_OPTS% -Djavax.net.ssl.trustStore=path_to_the_trust_store/ibm-team-ssl.truststore JAVA_OPTS=%JAVA_OPTS% -Djavax.net.ssl.trustStorePassword=ibm-team 复制

为了连接到 JConsole,以下示例调用使用这些新资产。身份验证基于证书交换。

jconsole -J-Djavax.net.ssl.trustStore=jconsole.truststore -J-Djavax.net.ssl.trustStorePassword=ibm-team -J-Djavax.net.ssl.keyStore=jconsole.keystore -J-Djavax.net。 ssl.keyStorePassword=密码服务:jmx:rmi:///jndi/rmi://host:1099/jmxrmi

于 2018-01-17T16:41:53.813 回答