簡體   English   中英

如何確保我使用“服務器”JVM?

[英]How to make sure I'm using the “server” JVM?

Sun的JVM有兩種形式: -client-server ,其中Server VM應該針對長時間運行的進程進行優化,建議用於服務器應用程序。

當我運行沒有參數的java時,它會顯示用法選項,其中包括以下文本:

The default VM is server,  
    because you are running on a server-class machine.

看過這個之后,我沒有費心將-server添加到進程啟動命令中。

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

vm_info: Java HotSpot(TM) Client VM (14.0-b16) for linux-x86 JRE (1.6.0_14-b08), built on May 21 2009 02:01:47 by "java_re" with gcc 3.2.1-7a (J2SE release)

在我看來,Java正在使用客戶端虛擬機,盡管它在幫助消息中說明了這一點。 我要在我的啟動命令中添加-server選項,但現在我很懷疑。 所以我的問題是: 有沒有辦法確保我運行的虛擬機真的是服務器虛擬機,而不是強迫JVM崩潰?

操作系統是ubuntu 8.04,但我使用的是從Sun網站下載的JDK 1.6.0_14。

你可以做

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

我的機器上的哪一個返回:

Java HotSpot(TM)客戶端VM

要么

Java HotSpot(TM)64位服務器VM

當然,你不應該根據這個值做任何關鍵的事情,因為它將來可能會改變,並且在另一個JVM上會完全不同。

在ServerFault上提出了一個非常類似的問題。 我想說,如果你關心運行哪個版本,請始終使用-client或-server。

好吧,如果您明確地從-server命令行提示開始,那么您正在服務器模式下運行。 你可以用這個來檢查:

  ManagementFactory.getRuntimeMXBean().getInputArguments();

您可以查看RuntimeMXBean ,它可能會打開更多信息,但必須在您運行的特定JVM上進行測試。

如果您不使用任何單行代碼,如果使用JConsole連接到JVM,則在“VM Summary”選項卡下,應該確切地說明正在監視哪個(服務器或客戶端)虛擬機。

例如,

Virtual Machine: OpenJDK Server VM version 1.6.0-b09

要使用JConsole遠程監視JVM,只需通過使用以下系統屬性啟動JVM來啟用JMX(Java Management Extensions)代理

> 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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM