JVM के लिए अधिकतम मेमोरी उपयोग कैसे सेट करें?


132

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

जवाबों:


94

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


1
आप MaxPermSize को भी देखना चाहते हैं।
urmalp

89
वह जेवीएम मेमोरी के बारे में पूछ रहा है। आपने जो कहा है वह ढेर का आकार है। वे दोनों अलग
19

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

2
Uhu। इसलिए मैंने सेट किया -Xmx524Mऔर इस प्रक्रिया में 1.2 जीबी रैम लगी। (?)
फिल्प २

7
यह सही उत्तर नहीं है, -Xms और -Xmx विकल्प केवल jvm हीप आकार को विनियमित करते हैं, न कि कुल मेमोरी आवंटन।
पीटर डे विंटर

31

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

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

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

-Xmx<ammount of memory>

उदाहरण:

-Xmx1024m

यह JVM के लिए अधिकतम 1GB मेमोरी की अनुमति देगा।


1
यही कारण है कि इस सूत्र के अनुसार, सच नहीं है, वहाँ कई तरीके आप ढेर के बाहर लीक कर सकते हैं stackoverflow.com/questions/1475290/...
erotsppa

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

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

बहुत यकीन है कि आप इसे नियंत्रित कर सकते हैं -XX:MaxDirectMemorySize। ऐसा नहीं है कि मैंने यह सुनिश्चित करने के लिए बहुत जोर दिया है लेकिन फिर भी;)
अलेक्जेंड्रगुनार्सन

2
@alexandergunnarson MaxDirectMemorySizeकेवल NIO बफ़र्स को प्रभावित करता है। JVM द्वारा सभी प्रकार की अन्य मूल मेमोरी का उपयोग किया जाता है।
क्रिस्टोफर शुल्त्ज़

16

यदि आप jvm (ढेर का आकार नहीं) ulimit -v के लिए मेमोरी को सीमित करना चाहते हैं

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


8
है ulimitएक लिनक्स आदेश? मैंने त्वरित Google खोज की और ulimitJVM के बीच कोई संबंध नहीं देखा । Y
सैम

हाँ यह linux कमांड है। tldp.org/LDP/solrhe/Securing-Optimizing-Linux-RH-Edition-v1.3/……
vsingh

11

ऊपर दिया गया उत्तर सही है, आप किसी व्यक्ति की याददाश्त को नियंत्रित नहीं कर सकते हैं जो एक जावा प्रक्रिया को आवंटित करता है। यह इस बात पर निर्भर करता है कि आपका आवेदन क्या कर रहा है।

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

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


1

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

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


1
मुझे संदेह है कि ऑप यह चाहता था: जब आप जावा से C / C ++ कोड पर कॉल करते हैं तो देशी मेमोरी का उपयोग किया जाता है।
ओम-नॉम-नॉम

6
यदि आप बफ़र्स को डायरेक्ट मेमोरी के साथ आवंटित करते हैं तो nio कॉल करते समय देशी मेमोरी का भी उपयोग किया जाता है। (... और क्लास लोडर, और थ्रेड जानकारी ....)
स्टु
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.