2012-03-12 16 views
6

आवंटित कर रहा है मुझे कुछ जावा प्रोग्राम चलाने के लिए एक नया वीपीएस मिला है जो मुझे और कुछ दोस्तों ने बनाया है। मैं इस तरह एक लाइन के साथ प्रक्रिया शुरू:जावा अतिरिक्त 2 जीबी मेमोरी

java -Xmx512M -jar program.jar 

हमारे पुराने VPS पर, आप कितना आभासी और निवासी स्मृति का उपयोग किया जा रहा था देखने के लिए 'शीर्ष' आदेश का उपयोग कर सकते हैं। यह 600-700 एमबी वर्चुअल मेमोरी की तरह उपयोग करेगा। अब हमारे नए वीपीएस पर, उसी आदेश के साथ, वर्चुअल मेमोरी हमेशा -Xmx मान पर अतिरिक्त ~ 2 जीबी लगती है। तो वर्चुअल मेमोरी के बजाय 600-700 एमबी के बजाय, यह 2700-3000 एमबी है।

पुराना वीपीएस सेंटोस 5.7 चला रहा है और नया CentOS 6.2 चल रहा है। दोनों जेआरई 1.7u3 64 बिट चल रहे हैं।

यह क्यों है और मैं इसे कैसे ठीक कर सकता हूं?

संपादित करें: शीर्ष

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 
27645 pyro 20 0 3003m 270m 10m S 5.0 1.7 1:19.18 java -Xmx512M -jar cserver.jar 

एक और संपादित करें: मैं पूछताछ नहीं कर रहा हूँ क्यों आभासी स्मृति जावा कमांड लाइन में निर्दिष्ट की तुलना में अधिक स्मृति का उपयोग कर रहा है। मैं सवाल कर रहा हूं कि इसका उपयोग करने से कहीं ज्यादा क्यों उपयोग किया जा रहा है।

+1

जांचें कि आपकी जावा प्रक्रिया निश्चित रूप से 'ps -ef' का उपयोग कर Xmx512m पैरामीटर का उपयोग कर रही है, और फिर यदि यह वास्तव में है, तो शीर्ष के आउटपुट के साथ अपना प्रश्न अपडेट करें। – Rich

+0

यदि निवासी आकार 270 एमबी है और कोई पेजिंग समस्या नहीं है, तो क्या कोई समस्या है? –

+0

यदि पुराने वीपीएस के बाद प्रोग्राम ने कोई भी बदलाव नहीं किया है, और पुराने वीपीएस के साथ, वर्चुअल मेमोरी केवल ~ 600-700 एमबी का उपयोग करेगी, तो हाँ कुछ सही नहीं लगता है। पुराने और नए वीपीएस दोनों एक ही ओएस और एक ही जावा संस्करण चलाते हैं। –

उत्तर

4

ढेर एकमात्र चीज नहीं है जो वर्चुअल मेमोरी का उपभोग करती है। वर्चुअल मेमोरी एप्लिकेशन का उपयोग करने वाली मेमोरी की मात्रा के बजाय पता स्थान की मात्रा है (निवासी एक बेहतर संकेतक है)

वर्चुअल मेमोरी में सभी थ्रेड स्टैक स्पेस, सीधी मेमोरी और मेमोरी मैप की गई फ़ाइलें शामिल हैं।

पहली चीज़ जो मैं जांचूंगा वह आपके अनुप्रयोगों के धागे की संख्या, अधिक धागे, अधिक वर्चुअल मेमोरी है।

+0

मुझे वर्चुअल मेमोरी चीज़ से अवगत है। मैं सिर्फ उत्सुक हूं कि यह इस नए वीपीएस पर इतनी मेमोरी आवंटित क्यों कर रहा है। दोनों वीपीएस जावा (1.7u3) और एक ही ओएस (CentOS 6.2) का एक ही संस्करण चला रहे हैं। साथ ही, कार्यक्रम ने वीपीएस स्विच के बाद से कोई भी नहीं बदला है। –

+0

यदि आप 'pmap -x {pid}' चलाते हैं। अक्सर जब लोग कहते हैं कि कुछ भी नहीं बदला है, तो इसका मतलब है कि वे कुछ भी नहीं जानते हैं, लेकिन स्पष्ट रूप से कुछ है। ;) –

+0

pmap कमांड के लिए धन्यवाद। जाहिर है, मुझे गलत जानकारी मिली, मेरे दोस्तों में से एक ने मुझे बताया कि हमारा पुराना वीपीएस वास्तव में सेंटोस 5.7 था और 6.2 नहीं था। पता चला कि 'मुद्दा' (जो कि कोई मुद्दा नहीं है) glibc 2.11 के अज्ञात ढेर मैपिंग के साथ है। –

1

वर्चुअल मेमोरी उपयोग का अर्थ है कि कितनी पता स्थान का उपयोग किया जाता है और आवश्यक रूप से राम उपयोग में सीधे अनुवाद नहीं करता है। ढेर, मैप की गई फ़ाइलें (बाइनरी और पुस्तकालयों सहित), आदि सभी वर्चुअल मेमोरी में योगदान देते हैं लेकिन वास्तव में हमेशा इस्तेमाल होने वाली रैम के लिए नहीं। ध्यान दें कि आपका आरईएस (रैम में निवासी) मेमोरी उपयोग केवल 270 एमबी अच्छा है। 32-बिट मशीन पर, आप पता स्थान सीमाओं में भाग सकते हैं, इसलिए यदि आप 2 जीबी चिह्न के करीब आते हैं तो वर्चुअल मेमोरी एक दुर्लभ संसाधन है (मान ओएस के आधार पर 1 जीबी या 3 जीबी भी हो सकता है)। 64-बिट सिस्टम पर, वर्चुअल मेमोरी (पता स्थान) असीमित के करीब है, इसलिए स्वयं के द्वारा, एक उच्च मूल्य को जोखिम के रूप में नहीं माना जाना चाहिए। बेशक, यदि यह वास्तविक उच्च रैम उपयोग या मैप की गई बहुत सारी फ़ाइलों से भी संबंधित है, जिन्हें आप नहीं जानते हैं कि क्यों उपयोग किया जाता है, तो यह देखने लायक है।

बेशक, जेवीएम में कचरा कलेक्टर के घर की देखभाल, कंपाइलर के काम, देशी कोड इत्यादि से संबंधित कुछ वास्तविक ओवरहेड (भौतिक रूप से आवंटित स्मृति में) भी है, और यह वर्चुअल मेमोरी उपयोग में भी दिखाई देगा। लेकिन चूंकि आरईएस और एसएचआर पद बहुत अधिक नहीं हैं, इसलिए मैं कहूंगा कि आतंक का कोई कारण नहीं है, खासकर यदि आप 64-बिट हैं।

संबंधित मुद्दे