क्या स्वैप स्वैप आकार बढ़ने से मेमोरी बढ़ जाएगी जो एक प्रोग्राम द्वारा उपयोग की जा सकती है?


1

मेरे पास एक कार्यक्रम है जिसमें बहुत अधिक मेमोरी की आवश्यकता होती है। इतना कि mallocसिस्टम याददाश्त से बाहर जाते ही फेल हो जाता है।

मुझे परवाह नहीं है अगर डिस्क के अंदर और बाहर गमागमन के लिए ओवरहेड बहुत अधिक है - मैं सिर्फ प्रोग्राम चलाना चाहता हूं। तो, क्या यह संभव है कि स्वैप विभाजन आकार को पर्याप्त रूप से बढ़ाकर स्मृति की त्रुटि को प्रभावी ढंग से रोका जा सकता है ताकि अधिक स्मृति उपलब्ध हो सके?

जवाबों:


3

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

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


ठीक है, मैंने सोचा था कि एक प्रोग्राम द्वारा आवंटित की जा सकने वाली वर्चुअल मेमोरी की मात्रा कुल उपलब्ध मेमोरी (भौतिक मेमोरी + स्वैप स्पेस) द्वारा सीमित है। यानी भले ही मेमोरी की मात्रा स्मृति ढेर के लिए आवंटित की गई हो, बड़ी हो सकती है, फिर भी मॉलॉक विफल हो सकता है क्योंकि आवंटित करने के लिए कोई वास्तविक मेमोरी नहीं बची है!
अंकुरज्व

लिनक्स पर, आप प्रक्रिया की अधिकतम उपलब्ध (आभासी) मेमोरी के अधिकतम आकार का पता लगाने के लिए getrlimit (RLIMIT_AS, p) फ़ंक्शन का उपयोग कर सकते हैं। यदि यह सीमा पार हो गई है, तो मॉलॉक () और एमएमएपी () फ़ंक्शन गलत होने के साथ [ENOMEM] पर सेट नहीं होंगे। आप सेटरलिमिट () मैन पेज को भी देखना चाहेंगे।
चूरा

लेकिन भले ही यह सीमा पार न हो, लेकिन क्या मॉलॉक विफल हो सकता है क्योंकि सिस्टम को आवंटित करने के लिए कोई मेमोरी नहीं है?
अंकुरज

1
मेमोरी स्पेस से बाहर चल रही एक प्रक्रिया के बारे में पढ़ने के लिए यहाँ कुछ है बनाम लिनक्स जो स्वैप स्पेस से बाहर चल रहा है: linuxdevcenter.com/pub/a/linux/2006/11/30/… "" निष्कर्ष यह है कि OOM दो तकनीकी कारणों से होता है: 1। VM में कोई अधिक पृष्ठ उपलब्ध नहीं हैं। कोई और अधिक उपयोगकर्ता पता स्थान उपलब्ध नहीं है। 3. # 1 और # 2 दोनों। "
चूरा

लिंक वास्तव में शानदार है .. मैं इसे उत्तर में जोड़ने की सलाह दूंगा
अंकुरज

1

नहीं। यह आपकी मेमोरी को नहीं बढ़ाता है - इसका मतलब है कि आपका ओएस उन चीजों को स्थानांतरित करने में सक्षम है जो मेमोरी को खाली करने के लिए तत्काल उपयोग नहीं करते हैं। यह प्रदर्शन के मामले में कोई अंतर नहीं होगा, लेकिन यदि प्रश्न में सॉफ़्टवेयर सक्रिय रूप से मेमोरी का उपयोग नहीं कर रहा है, तो आपका सिस्टम अन्य चीज़ों के लिए उपयोग करने के लिए आपके स्वैप को रैम स्वैप करने में सक्षम हो सकता है

आप स्वैप फ़ाइल बनाने और उपयोग करने का प्रयास करना चाह सकते हैं, जैसा कि स्वैप कार्य को देखने के लिए स्वैप विभाजन के विपरीत है।

आप उस सॉफ़्टवेयर को सीमित करने की कोशिश कर सकते हैं (हालांकि इसके परिणाम हो सकते हैं) जिस सॉफ्टवेयर का उपयोग करता है, वह अलमिट के साथ होता है।

स्वैप ऑफ़ लोड शारीरिक मेमोरी के लिए एक प्रतिस्थापन नहीं है - आप या तो अधिक मेमोरी जोड़ने के लिए जा रहे हैं, या वर्कआउट करें कि आपके प्रोग्राम को उस मेमोरी की आवश्यकता क्यों है, और इसे ठीक करें।


मेरे कहने का मतलब यह है कि स्वैप स्पेस को पर्याप्त रूप से बढ़ाने से क्या आउट-ऑफ-मेमोरी एरर को रोका जा सकता है? मुझे परवाह नहीं है अगर डिस्क में और बाहर पृष्ठों की अदला-बदली के लिए ओवरहेड बहुत अधिक है। मैं सिर्फ कार्यक्रम चलाना चाहता हूं।
अंकुरवज

यह चाहिए - यह मानते हुए कि यह सिस्टम को सभी पेजिंग से क्रॉल करने के लिए धीमा नहीं करेगा। मेरी सिफारिश परीक्षण के लिए एक बहुत बड़ी स्वैप फ़ाइल है, आपकी भौतिक स्मृति के आकार का 5-8 गुना।
जर्नीमैन गीक

0

भौतिक मेमोरी है, और केवल है, मेमोरी चिप्स आपके कंप्यूटर केस के अंदर। स्वैप फ़ाइल का उपयोग तब किया जाता है जब आपके पास पर्याप्त भौतिक मेमोरी का अभाव होता है। स्वैप फ़ाइल का आकार बढ़ाने से मेमोरी त्रुटियों को रोकने में मदद मिलेगी, लेकिन मैं इसकी सिफारिश नहीं करता हूं। बहुत अधिक स्वैप फ़ाइल उपलब्ध होने से आपके कंप्यूटर को अनुचित क्षमता का एहसास होगा और संभवत: पृष्ठ फ़ाइल का उपयोग करते समय इसे क्रॉल में धीमा करने का कारण होगा।

सबसे अच्छा समाधान अधिक मेमोरी चिप्स खरीदना है। यह सब कुछ थोड़ा बेहतर है कि सब कुछ कर देगा।

यदि आप मुझसे यह पूछने में कोई गुरेज नहीं करते हैं, तो आपका आवेदन ऐसा क्या कर रहा है जो इतनी मेमोरी खा जाता है?


मैं 60K X 60K मैट्रिक्स के लिए जगह आवंटित कर रहा हूं
अंकुरज

तो, 32-बिट पूर्णांक मानते हुए, आपको 3.4 जीबी मेमोरी की आवश्यकता है? ओउ! मैं सुझाव दूंगा कि आप अपनी स्वयं की स्वैप फाइल सिस्टम बनायें, मैट्रिक्स की चंक्स को लोड करना और बचाना जैसे कि आपको उनकी आवश्यकता है। आप इसे एक तरह से काम करने के लिए अनुकूलित कर सकते हैं जो आपको ओएस की स्वैप फ़ाइल के विपरीत सबसे तेज़ काम करता है जो कभी भी ऐसा करता है।
हाथ-ई-फूड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.