我想使用Java Mission Control监控我们在WebLogic 10.3.6上托管的Web应用程序的性能。我正在密切关注Java Mission Control上的Java One 2013 talk中讨论的过程。
当我尝试开始航班录制时,收到错误消息:
据我所知,我已经设置了正确的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参数(上面缩进)。我需要做些什么才能让它发挥作用?
答案 0 :(得分:1)
希望你已经在其他地方得到了答案, 但如果没有:
如果我猜的话,这个问题与机器的网络配置有关, 你可以尝试添加 -Djava.rmi.server.hostname =本地主机 要么 -Djava.rmi.server.hostname =
您也可以添加 -Dcom.sun.management.jmxremote.port =
并创建与localhost的自定义连接:或:
// Klara,Java Mission Control Dev
答案 1 :(得分: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
答案 2 :(得分: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中定义的操作。远程客户端 可以创建ajavax.management.loading.MLet MBean并使用它来创建 来自任意URL的新MBean,至少在没有安全性的情况下 经理。换句话说,一个流氓远程客户端可以创建您的Java 应用程序执行任意代码。因此,在禁用时 安全性可能是可以接受的,但它是强有力的 建议您不要禁用生产系统的安全性。
来源:https://docs.oracle.com/javase/7/docs/technotes/guides/management/agent.html
我认为以安全的方式使用它的最佳方式是使用双向SSL,如本文档所示:
设置客户端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 password -keypass password
输入以下命令以从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
要使用信任库配置服务器,除了以前的SSL配置的属性外,还要将相关属性添加到server.startupfile: 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”
Microsoft 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