2009-12-02 11 views
8

सूर्य का जेवीएम दो स्वादों में आता है: -client और -server, जहां सर्वर वीएम को लंबी चल रही प्रक्रियाओं के लिए अनुकूलित किया जाना चाहिए, और सर्वर अनुप्रयोगों के लिए अनुशंसित है।यह सुनिश्चित करने के लिए कि मैं "सर्वर" JVM का उपयोग कर रहा हूं?

जब मैं कोई पैरामीटर के साथ 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) 

यह है कि जावा, ग्राहक वीएम उपयोग कर रहा है मुझे लगता है कि यह में कहते हैं के बावजूद सहायता संदेश मैं अपने स्टार्टअप कमांड में -server विकल्प जोड़ने जा रहा हूं, लेकिन अब मुझे संदिग्ध है। तो मेरा सवाल है: यह सुनिश्चित करने का कोई तरीका है कि वीएम मैं वास्तव में सर्वर वीएम चला रहा हूं, बिना किसी JVM क्रैश को मजबूर करने के लिए?

ओएस उबंटू 8.04 है, लेकिन मैं जेडीके 1.6.0_14 का उपयोग कर रहा हूं जिसे मैंने सूर्य की वेबसाइट से डाउनलोड किया है।

+0

तक साथ JVM शुरू करने से JMX (जावा प्रबंधन एक्सटेंशन) एजेंट सक्षम वैसे, मुझे पता है कि यह सर्वर सर्वरफॉल्ट के लिए अधिक उपयुक्त लगता है, लेकिन मुझे उम्मीद है कि उत्तर जावा कोड की कुछ पंक्तियां होंगी, इसलिए ऐसा लगता है कि प्रोग्रामर के पास जवाब देने का एक बेहतर मौका है। – itsadok

+0

मुझे यह इंगित करने की आवश्यकता महसूस होती है कि सिर्फ "जावा" चलाने के साथ कोई तर्क नहीं है, सर्वर VM का उपयोग कर रहा है, यह गारंटी नहीं देता है कि जो भी स्क्रिप्ट/कमांड क्रैश की गई प्रक्रिया को लॉन्च करता है वह क्लाइंट वीएम को तर्क के रूप में निर्दिष्ट नहीं कर रहा है। –

उत्तर

11

आप

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

कर सकते हैं कौन सा मेरी मशीन रिटर्न पर या तो:

जावा हॉटस्पॉट (टीएम) क्लाइंट वीएम

या

जावा हॉटस्पॉट (टीएम) 64-बिट सर्वर वीएम

बेशक आपको इस मूल्य के आधार पर कुछ भी महत्वपूर्ण नहीं करना चाहिए, क्योंकि यह शायद भविष्य में बदल जाएगा, और यह किसी अन्य JVM पर पूरी तरह अलग होगा।

+0

सर्वर के रूप में चलते समय, आउटपुट "जावा हॉटस्पॉट (टीएम) 64-बिट सर्वर वीएम" होता है। यह मेरे अपने प्रश्न के लिए बहुत अच्छा इनपुट है (जो किसी के लिए दिलचस्प होना चाहिए जो सोच रहा है कि सिस्टम गुणों के रूप में कौन सी जानकारी उपलब्ध है): http://stackoverflow.com/questions/1803075/complete-list-of-available-java-system- गुण-और-ज्ञात-मान – sfussenegger

+0

यह "जावा हॉटस्पॉट (टीएम) सर्वर वीएम" भी कह सकता है। इसके अलावा, विभिन्न वीएम विभिन्न तारों को वापस कर सकते हैं। – Bombe

9

मेरे पास एक बहुत ही समान प्रश्न which I asked on ServerFault था। मैं कहूंगा, अगर आप परवाह है कि कौन सा संस्करण चलाया जाता है, तो हमेशा-क्लाइंट या सर्वर का उपयोग करें।

1

ठीक है, अगर आप स्पष्ट रूप से -सर्वर कमांड लाइन प्रॉम्प्ट से प्रारंभ करते हैं, तो आप सर्वर मोड में चल रहे हैं। आप देख सकते हैं कि इस के साथ:

ManagementFactory.getRuntimeMXBean().getInputArguments(); 

आप RuntimeMXBean जो अधिक जानकारी खोल सकता है पर देख सकते हैं, लेकिन यह है कि विशिष्ट JVM आप चल रहे हैं पर परीक्षण करना होगा।

+0

यह आदेश "-सर्वर" तर्क (बस अन्य सभी तर्क) सूचीबद्ध नहीं करता है। –

1

कोड की किसी भी पंक्ति को लिखने के बिना, यदि आप अपने वीवीएम से कनेक्ट करने के लिए JConsole का उपयोग करते हैं, तो 'वीएम सारांश' टैब के तहत, यह कहना चाहिए कि वास्तव में कौन सी (सर्वर या क्लाइंट) वर्चुअल मशीन पर नजर रखी जा रही है।

उदाहरण के लिए

,

Virtual Machine: OpenJDK Server VM version 1.6.0-b09

दूर JConsole का उपयोग कर अपने JVM पर नजर रखने के लिए, बस निम्नलिखित सिस्टम गुण

> 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] 
संबंधित मुद्दे