[英]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.