JVM मेमोरी खपत


9

मैं कम मेमोरी सिस्टम (150-256Mb) पर टॉमकट चलाने की कोशिश कर रहा हूं। भले ही मैं -Vmx64m के साथ JVM शुरू करता हूं (जो कि वैसे भी डिफ़ॉल्ट होना चाहिए), प्रक्रिया तुरंत 200M + तक ले जाती है।

मुझे आश्चर्य है कि जेवीएम को खुद ही इतनी स्मृति की आवश्यकता है, या यदि इस ट्यूनिंग का एक तरीका है? क्या अन्य जेवीएम कम मेमोरी खपत के लिए सूर्य से बेहतर हैं - और क्या वे टॉमकैट के साथ काम करते हैं?

जवाबों:


5

हीप के अलावा (द्वारा निर्दिष्ट ) -Xmsऔर -Xmxआपको गैर हीप क्षेत्रों को शामिल करने की आवश्यकता है। इसमें शामिल है

  • पर्म जनरल, जो 32bit सिस्टम पर 64mb है, और शुरू में 64bit सिस्टम पर 96mb है
  • कोड कैश, जो JVM के आधार पर 20 से 40mb के बीच है
  • NIO बफ़र क्षेत्र (जहाँ DirectByteBuffers खींचे गए हैं), यह शुरू में 64mb है

स्वयं जेवीएम का कार्य स्थान भी है जो कुछ दर्जन एमबी का होगा।

सर्वर क्लास मशीन का उपयोग करते समय आपको Sun JVM के ऑटो साइज़िंग के बारे में भी पता होना चाहिए । समय के साथ सर्वर वर्ग (2 जीबी मेमोरी, एक से अधिक कोर) की परिभाषा को कुछ मूल्यह्रास का सामना करना पड़ा है और अब अधिकांश मशीनें -serverअनुकूलन को चालू करने में सक्षम हैं । मेरी सलाह निर्दिष्ट करने के लिए हमेशा होता है -Xmsऔर -Xmxसेटिंग्स और पारित -serverजब तक आप एक अच्छे कारण के भी नहीं सोच सकते हैं।


वर्चुअल मेमोरी से भी सावधान रहें जो JVM केवल सुरक्षित रखता है, और अभी तक उपयोग नहीं करता है।
स्टीव श्नेप

यह सच है कि इनमें से अधिकांश सेगमेंट, जैसे परमगैन और कोड कैश को स्टार्टअप पर आवंटित किया जाता है, लेकिन अधिकांश कर्नेल उन खंडों को पृष्ठ आवंटित करने से बचेंगे जब तक कि जरूरत न हो।
डेव चेनी

1
जानकारी के लिए धन्यवाद - मुझे लगता है कि यह बताता है कि स्मृति कहाँ जा रही है। क्या इन मूल्यों को बदलने का कोई तरीका है? यहां तक ​​कि बेहतर यह देखने का एक तरीका होगा कि प्रत्येक अनुभाग कितना उपयोग में था - मुझे नहीं पता कि क्या जावा डीबगिंग / निगरानी उपकरण में से कोई भी आपको ऐसा करने देता है?
ड्रेमन

1
उपयोग में आने वाले विभिन्न सेगमेंट के बारे में जानने के लिए आप pmap या jmap का उपयोग कर सकते हैं। अधिकांश सामान्य विकल्प (और उनकी चूक) यहां सूचीबद्ध हैं, java.sun.com/javase/technologies/hotspot/vmoptions.jsp । वे अक्सर बदलते हैं और ओएस (स्टैक आकार आमतौर पर) और आर्क (64 बिट ओएस आमतौर पर बड़े जेवीएम क्षेत्रों में अंतर) के अधीन होते हैं
डेव चेनी

3

-Xmx विकल्प के साथ आप उस ढेर के आकार को प्रतिबंधित करते हैं जो JVM सुरक्षित रखता है ... अतिरिक्त संसाधन JVM हैं ...

"मेमोरी के लिए धन्यवाद" * एक अच्छा लेख है जो बताता है कि एक जेवीएम मेमोरी का उपयोग कैसे करता है ...

इसके अलावा आप आईबीएम के जेवीएम की कोशिश कर सकते हैं, यह टॉमकैट के साथ काम करना चाहिए, पता नहीं कि कुछ मुफ्त जेवीएम कार्यान्वयन काम करते हैं या नहीं।

फिर भी, मुझे नहीं लगता कि स्मृति के साथ एक मशीन जो कम है, वह किसी भी अच्छे को यू करेगी। जावा को सिर्फ मेमोरी की जरूरत होती है।

* नए उपयोगकर्ता हाइपरलिंक प्रस्तुत नहीं कर सकते हैं, आपको स्वयं उस लेख को देखना होगा ... यह "मेमोरी आईबम के लिए धन्यवाद" के लिए Google पर पहली हिट है।


3
ibm.com/developerworks/java/library/j-nativememory-linux - लेख का लिंक "मेमोरी के लिए धन्यवाद"
StackKrish

2

JRockit JVM को भी आज़माएं, जिसमें मेमोरी फुटप्रिंट कम है। आप अभी भी BEA लाइसेंस प्राप्त JRockit संस्करणों को मुफ्त में डाउनलोड कर सकते हैं। ओरेकल से पहले के संस्करणों ने BEA पर अधिकार कर लिया।

डाउनलोड लिंक के लिए http://forums.oracle.com/forums/thread.jspa?threadID=816133&tstart=0 देखें ।


0

एक उपयोगी तकनीक जो मुझे मिली है वह यह है कि जेएमएक्स मॉनिटरिंग का उपयोग यह देखने के लिए किया जाता है कि ढेर बनाम पर्मगेन स्पेस द्वारा कितनी मेमोरी का उपयोग किया जाता है।

टॉमकट में जेएमएक्स सेट करें जैसा कि यहाँ वर्णित है http://tomcat.apache.org/tomcat-6.0-doc/monitoring.html

फिर JConsole (JDK 5 या JDK 6 के साथ आता है) का उपयोग करें - मेमोरी टैग समय के साथ मेमोरी खपत को ट्रैक करेगा।

इसके अलावा - webapps के नरम पुनरारंभ से सावधान रहें। यदि आप किसी वेबप को पुनः लोड करते हैं, तो परमेजन स्थान कचरा एकत्र नहीं किया जाएगा और समय के साथ निर्माण करेगा। पर्मगेन स्थान को पुनः प्राप्त करने के लिए आपको टॉमकैट का पूर्ण विराम / प्रारंभ करने की आवश्यकता है।


VisualVM का उपयोग JConsole के बजाय भी किया जा सकता है और JVM के भीतर मेमोरी समस्याओं की तलाश में और भी अधिक विवरण दे सकते हैं। मुझे समस्याओं को खोजने के लिए एक से अधिक अवसरों पर इसका उपयोग करना पड़ा है।
जेरेमी बोस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.