【问题标题】:How to make sure I'm using the "server" JVM?如何确保我使用的是“服务器”JVM?
【发布时间】:2009-12-02 14:12:13
【问题描述】:

Sun 的 JVM 有两种类型:-client-server,其中服务器 VM 应该针对长时间运行的进程进行优化,建议用于服务器应用程序。

当我不带参数运行java 时,它会显示使用选项,其中包括以下文本:

默认虚拟机是服务器, 因为您在服务器级机器上运行。

看到这里,我懒得在进程启动命令中添加-server

但是,在最近的 JVM 崩溃日志中,我注意到文件末尾附近有以下行:

vm_info:用于 linux-x86 JRE (1.6.0_14-b08) 的 Java HotSpot(TM) 客户端 VM (14.0-b16),由“java_re”和 gcc 3.2.1-7a (J2SE) 于 2009 年 5 月 21 日 02:01:47 构建释放)

在我看来,Java 正在使用客户端 VM,尽管它在帮助消息中说了什么。我将在启动命令中添加-server 选项,但现在我很怀疑。所以我的问题是:有没有办法确保我运行的虚拟机确实是服务器虚拟机,而无需强制 JVM 崩溃?

操作系统是 ubuntu 8.04,但我使用的是从 Sun 网站下载的 JDK 1.6.0_14。

【问题讨论】:

  • 顺便说一下,我知道这个问题似乎更适合ServerFault,但我希望答案是几行java代码,所以看起来程序员更有机会回答.
  • 我觉得有必要指出,仅仅因为运行没有参数的“java”正在使用服务器虚拟机,这并不能保证任何脚本/命令启动崩溃的进程都没有指定客户端虚拟机作为参数。

标签: java jvm


【解决方案1】:

你可以的

System.out.println(System.getProperty("java.vm.name"));

在我的机器上返回:

Java HotSpot(TM) 客户端虚拟机

Java HotSpot(TM) 64 位服务器虚拟机

当然你不应该根据这个值做任何关键的事情,因为它可能会在未来发生变化,并且在另一个 JVM 上会完全不同。

【讨论】:

  • 作为服务器运行时,输出为“Java HotSpot(TM) 64-Bit Server VM”。这是对我自己的问题的很好的输入(对于想知道哪些信息可用作系统属性的人来说应该很有趣):stackoverflow.com/questions/1803075/…
  • 也可以说“Java HotSpot(TM) Server VM”。此外,不同的虚拟机可以返回不同的字符串。
【解决方案2】:

我有一个非常相似的问题which I asked on ServerFault。我想说,如果您关心运行哪个版本,请始终使用 -client 或 -server。

【讨论】:

    【解决方案3】:

    好吧,如果你明确地从 -server 命令行提示符开始,你就在服务器模式下运行。你可以用这个来检查:

      ManagementFactory.getRuntimeMXBean().getInputArguments();
    

    您可以查看RuntimeMXBean,它可能会打开更多信息,但这必须在您正在运行的特定 JVM 上进行测试。

    【讨论】:

    • 此命令不列出“-server”参数(仅列出所有其他参数)。
    【解决方案4】:

    无需编写任何单行代码,如果您使用JConsole 连接到您的 JVM,在“VM 摘要”选项卡下,它应该准确说明正在监视哪个(服务器或客户端)虚拟机。

    例如,

    Virtual Machine: OpenJDK Server VM version 1.6.0-b09

    要使用 JConsole 远程监控 JVM,只需通过以下系统属性启动 JVM 来启用 JMX(Java 管理扩展)代理

    > java.rmi.server.hostname=[your server IP/Name] // without this, on linux, jconsole will fail to connect to the remote server where JVM is running
    > com.sun.management.jmxremote.authenticate=false
    > com.sun.management.jmxremote.ssl=false
    > com.sun.management.jmxremote.port=[portNum]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-18
      • 2019-05-29
      • 2020-06-19
      • 2021-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多