通过JMX确定Java版本

时间:2013-01-09 21:00:15

标签: java jmx

我希望远程确定通过JMX运行特定进程的Java版本。具体来说,我想要像“1.6.0_26”这样的东西,这是System.getProperty("java.version")将返回的东西。

通过RunTime MBean,我可以检查VmName和VmVersion属性,它们分别给出“Java HotSpot(TM)64位服务器VM”和“20.1-b02”。我不确定“20.1-b02”来自哪里;有没有办法将其与“1.6.0_26”版本相匹配?

2 个答案:

答案 0 :(得分:3)

java.lang.Runtime bean的一些提示:

  • specVersion要求
  • LibraryPath / BootClassPath(很可能在文件夹名称中)
  • SystemProperties - > java.runtime.version

修改

正如@Kent在代码中指出java.lang.management.RuntimeMXBean.getSystemProperties()SystemProperties - >相同JConX客户端中的java.runtime.version,如JConsole。

答案 1 :(得分:0)

事实证明,旧版本的JVM / JMX为specVersion返回了错误的内容,因此使用@Kent提供的技术可以更好地工作:

        getLogger().finest("Checking JVM version");
    String specVersion = ManagementFactory.getRuntimeMXBean().getSpecVersion();
    getLogger().log(Level.FINEST, "Specification Version from JMX = ''{0}''", specVersion);

    // Because of bug in the above call, earlier versions of JMX reported the version of
    // JMX and not Java (so 1.6 reports 1.0 - replacing with the call below fixes this problem
    // and consistently returns the specification of the JVM that is being used.
    String javaVersion = ManagementFactory.getRuntimeMXBean().getSystemProperties().get("java.specification.version");
    getLogger().log(Level.FINEST, "java.specification.version found ''{0}''", javaVersion);