2012-03-15 28 views
9

मैं 128 एमबी (-Xmx128M) के अधिकतम ढेर आकार के साथ जावा एप्लिकेशन चला रहा हूं। यह आउटऑफमेमरी एरर, या किसी अन्य अनचाहे अपवाद के साथ सफल समापन के लिए चल रहा है। इसलिए, मुझे लगता है कि इसका वास्तविक ढेर आकार 128 एमबी की घोषित सीमा के भीतर रहा था।मेरा जेवीएम का कुल मेमोरी उपयोग एक्सएमएक्स मूल्य से 30 गुना अधिक क्यों है?

हालांकि, इस जावा एप्लिकेशन के लिए प्रक्रिया को देखते समय, मैं 4,188,548 केबी (~ 4 जीबी) की कुल मेमोरी उपयोग देख रहा हूं। यह ढेर के नियंत्रित अधिकतम आकार 30 गुना से अधिक की वृद्धि है। हालांकि मैं समझता हूं कि इस मान में वर्चुअल मेमोरी आवंटित है जो वास्तविक भौतिक स्मृति से काफी अधिक हो सकती है, यह सूर्य ग्रिड इंजन द्वारा लगाए गए कठोर सीमाओं को प्रभावित करती है, और इसलिए यह सार्थक है।

यह वास्तव में कितना संभव है? मैं समझता हूं कि जेवीएम द्वारा खपत कुल स्मृति में ढेर के आकार की तुलना में काफी कुछ शामिल है, लेकिन मुझे समझ में नहीं आता है कि एप्लिकेशन को वास्तव में अपनी ऑब्जेक्ट्स बनाने और इसकी गणना करने की आवश्यकता के अलावा कई जीबी अतिरिक्त मेमोरी की आवश्यकता कैसे हो सकती है ।

मैं 64-बिट आरएचईएल लिनक्स वितरण पर सूर्य जावा 1.6.0.31 का उपयोग कर रहा हूं।

+2

क्या आप 'नए थ्रेड() 'की एक असंबद्ध संख्या बना रहे हैं? आपके द्वारा उत्पन्न प्रत्येक देशी धागे में स्मृति की ढेर होती है जो जावा ढेर का हिस्सा नहीं है। – Affe

+0

मेमोरी उपयोग किस उपाय से? आवंटित पता स्थान जिसमें उसमें कोई वास्तविक सामग्री मैप नहीं है, शायद वह नहीं है जिसे आप परवाह करते हैं; सुनिश्चित करें कि आप आरएसएस को माप रहे हैं, वीआईआरटी नहीं। –

+0

@Affe यह एक थ्रेडिंग मुद्दा नहीं है। आवेदन एकल थ्रेडेड है। कुल स्मृति उपयोग को मापने के लिए – jjcarver

उत्तर

4

जावा ढेर -Xmx द्वारा नियंत्रित के अलावा कई स्मृति डूब रहे हैं:

  • थ्रेड स्टैक
  • PermGen अंतरिक्ष
  • प्रत्यक्ष ByteBuffers और मैप ByteBuffer
  • स्मृति मूल कोड/पुस्तकालयों
  • द्वारा आवंटित

विवरण जानने के बिना आपके सिस्टम का मुझे लगता है कि कुछ मैप किए गए ByteBuffers का उपयोग करता है।

लेकिन आप pmap कमांड के आउटपुट की जांच करके इस मुद्दे को खोद सकते हैं। यह प्रक्रिया के सभी मेमोरी क्षेत्रों को सूचीबद्ध करता है, साथ ही किसी भी क्षेत्र को फ़ाइल नामों के साथ मैप किया जाता है (यदि क्षेत्र पाठ्यक्रम मैप किया गया है)।

+1

यह एक अच्छा सुझाव है, हालांकि pmap आउटपुट में, दुर्भाग्यवश सभी गंभीर रूप से अपमानजनक स्मृति क्षेत्रों में "एनन" का "मैपिंग" कॉलम होता है, उदा। '000000052d4c0000 7722240 0 0 आरडब्ल्यू --- [एनन]' – jjcarver

+0

'एनन' क्षेत्र उपर्युक्त सूची को "देशी libs" और "बाइटबेटर्स को प्रत्यक्ष" करने के लिए कम करते हैं। –

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

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