2011-03-25 15 views
8

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

हम निम्नलिखित मानकों के साथ कार्यक्रम चलाने: -Xms256m -Xmx3096m जो के रूप में मैं समझता हूँ कि 256 के एक प्रारंभिक ढेर आकार, और 3096.

की एक अधिकतम ढेर आकार मैं अब क्या उम्मीद थी इसका मतलब है यह देखने के लिए है कि शुरुआत में जरूरी ढेर बढ़ता है, और फिर आवश्यकतानुसार घट जाती है क्योंकि स्मृति को हटा दिया जाता है (हालांकि यह मेरी पहली गलती हो सकती है)। , हम प्रसंस्करण किए गए कार्यों को इस्तेमाल किया ढेर करने के लिए नाटकीय रूप से चला जाता है: इस्तेमाल किया ढेर 1GB, ढेर आकार 2 जीबी

  • 5 मिनट है:

    • 3 में मिनट: क्या हम वास्तव में jvisualvm के साथ देख पीछा कर रहा है पर्याप्त कुछ भी नहीं, ढेर तथापि के बारे में 1.5GB
    • 7 मिनट के लिए एक ही बूँदें आकार के पास ->: वास्तविक समय के छोटे अंश प्रसंस्करण समय-समय पर, ढेर इस्तेमाल किया ही कभी 100-200MB या तो बीच, ढेर आकार हालांकि लगातार शेष लगभग 1.7 जीबी पर।

    मेरा प्रश्न होगा, मेरा ढेर क्यों कम हो गया है जैसा कि मैंने शायद इसकी उम्मीद की थी? क्या यह मूल्यवान स्मृति के लिनक्स बॉक्स पर अन्य प्रक्रियाओं को लुप्त नहीं कर रहा है, और यदि ऐसा है तो मैं इसे कैसे ठीक कर सकता हूं? हम कभी-कभी स्मृति त्रुटियों से बाहर देखते हैं, और इन प्रक्रियाओं के साथ सबसे अधिक 'अप्रत्याशित' स्मृति आकार आवंटित किया जाता है, मैंने सोचा कि यह उनके साथ शुरू करना सबसे अच्छा है।

    चीयर्स, डेव।

    (~ कृपया JVM स्मृति ट्यूनिंग पर समझ की कमी संभव बहाना!)

  • +0

    शायद बॉक्स में कुछ और स्वैप असाइन करें। चूंकि इनमें से कई पृष्ठ अप्रयुक्त हैं, उन्हें कचरे के बिना कर्नेल द्वारा बाहर निकाल दिया जा सकता है। निवासी स्मृति के लिए अन्य प्रक्रियाएं ठीक होनी चाहिए। – wds

    उत्तर

    2

    आप ढेर विस्तार और सिकुड़ने के बारे में this answer देखना चाहेंगे। डिफ़ॉल्ट रूप से JVM ढेर को कम करने के बारे में बहुत आक्रामक नहीं है। इसके अलावा यदि ढेर में लंबे समय तक पर्याप्त खाली स्थान है तो यह एक जीसी ट्रिगर नहीं करेगा, जो मुझे विश्वास है कि एकमात्र समय इसे कम करने पर विचार करता है।

    आदर्श रूप से आप अधिकतम उस मान पर कॉन्फ़िगर करते हैं जो आपके आवेदन को पूर्ण लोड के तहत पर्याप्त हेडरूम प्रदान करता है, फिर भी यह हमेशा उपयोग में होने पर ओएस प्रदर्शन को स्वीकार्य है।अनुमानितता और संभावित रूप से बेहतर प्रदर्शन के लिए न्यूनतम को अधिकतम सेट करना असामान्य नहीं है (मेरे पास उस ऑफहेड के संदर्भ में कुछ भी नहीं है)।

    +0

    धन्यवाद व्हाइटफैंग। मुझे लगता है कि अधिक आक्रामक ढेर सिकुड़ने के लिए समय, मुझे लगता है। – f1dave

    +0

    दूसरी बात जो मैं सोच रहा हूं, क्या इस तरह की चीज ओएस-निर्भर है? लिनक्स मेमोरी/ढेर मुद्दों को अलग-अलग तरीके से विंडोज़, इत्यादि को संभालेगा? – f1dave

    +0

    अधिकांश भाग के लिए मेरा मानना ​​है कि ओएस स्मृति/ढेर ट्यूनिंग के लिए कोई फर्क नहीं पड़ता। मुझे यकीन है कि ओएस विनिर्देशों के लिए खाते में मामूली मतभेद हैं, लेकिन जेवीएम आमतौर पर इसका व्यवहार करने के लिए डिज़ाइन किया गया है। सोलारिस में कुछ अतिरिक्त knobs होते हैं, लेकिन मुझे संदेह है कि इससे ज्यादा मदद मिलेगी। – WhiteFang34

    1

    मैं एक पूरा जवाब नहीं है, लेकिन a similar question has come up before। पहले की चर्चा से आपको ऑपरेटिंग सिस्टम पर वापस ढेर को मजबूर करने के लिए अपने ट्यूनिंग पैरामीटर के रूप में -XX:MaxHeapFreeRatio= की जांच करनी चाहिए। documentation here है, और मेरा मानना ​​है कि डिफ़ॉल्ट मान JVM द्वारा स्वामित्व में बने रहने के लिए अप्रयुक्त ढेर की एक बड़ी मात्रा की अनुमति देता है।

    0

    ठीक है, जब आप सोचते हैं तो जीसी हमेशा नहीं चलता है और यह हमेशा समझदार नहीं होता है। यह पुरानी जीन स्पेस से ऑब्जेक्ट्स को इकट्ठा करना शुरू कर सकता है अगर यह लगभग हीप स्पेस से बाहर हो जाता है (चूंकि पुराने जेन से इकट्ठा होने से आम तौर पर एक स्टॉप-द-वर्ल्ड संग्रह शामिल होता है जिसे जीसी वास्तव में करने की ज़रूरत नहीं है यह)।

    0

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

    फ़ाइल हैंडलर के लिए देखने के लिए एक और चीज है; मेरे पास विवरण नहीं है लेकिन मेरे सहयोगियों में से एक ने कुछ साल पहले एक प्रक्रिया के कारण एक ढेर संतृप्ति की समस्या का सामना किया था, जिसने कई फाइलें खोलीं, और पाया कि प्रत्येक बार जब उन्होंने एक खोला 4kb बफर देशी ढेर में आवंटित किया गया था, इसकी प्रसंस्करण के अंत में मुक्त हो गया। मुझे उम्मीद है कि यह अस्पष्ट संकेत मदद कर सकते हैं ...

    +0

    धन्यवाद ज़िम - लेकिन मैं पहले से ही Visualvm के साथ देख रहा हूं, इस तरह मुझे मूल प्रश्न में आंकड़े मिल गए हैं। – f1dave

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