2009-09-29 16 views
89

मैं JVM द्वारा उपयोग की गई अधिकतम मेमोरी को सीमित करना चाहता हूं। ध्यान दें, यह केवल ढेर नहीं है, मैं इस प्रक्रिया द्वारा उपयोग की जाने वाली कुल स्मृति को सीमित करना चाहता हूं।जेवीएम के लिए अधिकतम मेमोरी उपयोग कैसे सेट करें?

उत्तर

82

तर्क -Xms<memory>-Xmx<memory> का उपयोग करें। क्रमशः मेग्स और गिग्स बाइट्स को इंगित करने के लिए संख्याओं के बाद M या G का उपयोग करें। -Xms अधिकतम और -Xmx अधिकतम इंगित करता है।

+1

आप मैक्सपर्मसाइज़ को भी देखना चाहेंगे। – pmu

+54

वह जेवीएम मेमोरी के बारे में पूछ रहा है। आपने जो कहा है वह ढेर आकार है। वे दोनों – vsingh

+6

अलग-अलग टिप्पणियों का उल्लेख करने के लिए अलग-अलग हैं, एक्सएमएस और एक्सएमएक्स केवल ढेर को कॉन्फ़िगर करते हैं।हालांकि इन चरों को कॉन्फ़िगर करने से गैर-ढेर स्थान पर अप्रत्यक्ष प्रभाव पड़ता है, प्रश्न पूछने वाला व्यक्ति यह निर्धारित करने की कोशिश कर रहा है कि कुल मेमोरी उपयोग (हेप + गैर-ढेर) – murungu

26

आपको स्टैक लीकिंग मेमोरी (यह बेहद असामान्य है) के बारे में चिंता करने की ज़रूरत नहीं है। एकमात्र समय जब आप ढेर को नियंत्रण से बाहर कर सकते हैं तो अनंत (या वास्तव में गहरा) रिकर्सन के साथ होता है।

यह सिर्फ ढेर है। क्षमा करें, पहले आपके प्रश्न को पूरी तरह से नहीं पढ़ा।

आपको निम्न कमांड लाइन तर्क के साथ JVM चलाने की आवश्यकता है।

-Xmx<ammount of memory> 

उदाहरण:

-Xmx1024m 

कि JVM के लिए स्मृति के 1 जीबी की एक अधिकतम की अनुमति देगा।

+0

यह सच नहीं है, इस धागे के अनुसार, आप ढेर के बाहर रिसाव कर सकते हैं कई तरीके हैं http://stackoverflow.com/questions/1475290/java-memory-mystery-do-i-have-a-leak – erotsppa

+0

आप सही हैं, स्टैक से संबंधित स्मृति समस्याओं के कई तरीके हैं। हालांकि, वे बहुत आम नहीं हैं। – jjnguy

+5

बहुत यकीन है कि आप गैर-ढेर स्मृति आकार को नियंत्रित नहीं कर सकते हैं, क्या आप? –

9

उपर्युक्त उत्तर सही प्रकार का है, आप इस बात पर ध्यान से नियंत्रण नहीं कर सकते कि जावा प्रक्रिया कितनी देशी स्मृति आवंटित करती है। यह इस बात पर निर्भर करता है कि आपका आवेदन क्या कर रहा है।

उस प्लेटफॉर्म के आधार पर, आप कुछ तंत्र का उपयोग करने में सक्षम हो सकते हैं, उदाहरण के लिए, जावा या किसी अन्य प्रक्रिया के आकार को सीमित करने के लिए।

बस उस सीमा को हिट करने पर इसे असफल होने की उम्मीद न करें। जावा ढेर पर आवंटन विफलताओं की तुलना में मूल स्मृति आवंटन विफलताओं को संभालना बहुत कठिन होता है। आवेदन काफी हद तक अच्छा होगा कि एप्लिकेशन क्रैश हो जाएगा लेकिन इस प्रक्रिया के आकार को बनाए रखने के लिए सिस्टम के लिए कितना महत्वपूर्ण है कि यह अभी भी आपके अनुरूप हो सकता है।

2

NativeHeap -XX द्वारा increasded जा सकता है: MaxDirectMemorySize = 256M (डिफ़ॉल्ट 128 है)

मैं इसे उपयोग नहीं किया है। शायद आप इसे उपयोगी पाएंगे।

+1

मुझे संदेह है कि सेशन यह चाहता था: जब आप जावा से सी/सी ++ कोड पर कॉल करते हैं तो मूल स्मृति का उपयोग किया जाता है। –

+4

मूल स्मृति का उपयोग तब भी किया जाता है जब आप सीधे कॉल के साथ बफर आवंटित करते हैं। (... और क्लासलोडर, और थ्रेड जानकारी ....) – stu

10

आप JVM के लिए स्मृति (नहीं ढेर आकार) सीमित करना चाहते हैं ulimit -v

JVM और ढेर स्मृति के बीच अंतर की एक विचार प्राप्त करने के लिए, इस उत्कृष्ट लेख http://blogs.vmware.com/apps/2011/06/taking-a-closer-look-at-sizing-the-java-process.html

पर एक नज़र
+6

क्या लिनक्स कमांड 'ulimit' है? मैंने एक त्वरित Google खोज की और 'ulimit' और JVM के बीच कोई संबंध नहीं देखा। वाई – Sam

+0

हां यह लिनक्स कमांड है। http://tldp.org/LDP/solrhe/Securing-Optimizing-Linux-RH-Edition-v1.3/x4733.html – vsingh

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