आप लिनक्स Ate My Ram समस्या का अनुभव कर रहे हैं ।
दहशत नहीं।
ये कोई समस्या नहीं है।
आपका सिस्टम डिज़ाइन किए अनुसार कार्य कर रहा है।
समस्या आपका ओएस नहीं है - समस्या यह है कि "मुफ्त" मेमोरी की आपकी समझ है।
यूनिक्स सिस्टम केवल चलने वाले कार्यक्रमों से अधिक के लिए मेमोरी का उपयोग करता है। इसके लिए मेमोरी का उपयोग किया जा सकता है:
- चल रहे कार्यक्रम (सक्रिय / उपयोग)
- ट्रांजिट में बफरिंग डेटा (बफर)
- कैशिंग डेटा हाल ही में डिस्क (कैश) से पढ़ा / लिखा गया है
- बिल्कुल कुछ भी नहीं (मुक्त)
आधुनिक यूनिक्स सिस्टम रैम के उपयोग की रिपोर्ट कैसे करता है, इसका संक्षिप्त (और काफी हद तक अधूरा) दौरा है।
फ्री मेमोरी (ओएस परिभाषा) क्या है?
जब यूनिक्स प्रणाली रैम को फ्री के रूप में रिपोर्ट कर रही है तो इसका मतलब है "मैं इस रैम का उपयोग किसी भी चीज के लिए नहीं कर रहा हूं"।
फ्री रैम प्रभावी रूप से बेकार है - यह आपके सिस्टम को तेजी से नहीं बना रहा है, यह सिर्फ वहाँ बैठे है "फ्री" होने की स्थिति में कुछ इसकी आवश्यकता है। वह चीज जो ऊपर बताई गई तीन अन्य वस्तुओं में से कोई भी हो सकती है।
कैश और बफर मेमोरी क्या हैं?
कैश और बफर मेमोरी रैम हैं ऑपरेटिंग सिस्टम आपके सिस्टम को तेज बनाने के लिए उपयोग कर रहा है। अभी प्रोग्राम चलाने के लिए
इस मेमोरी की आवश्यकता नहीं है , इसलिए आपका OS डेटा को धारण करने के लिए इसका उपयोग कर रहा है, जिसकी उसे अक्सर आवश्यकता होती है - उदाहरण के लिए C लाइब्रेरी (आपके द्वारा चलाए जा रहे प्रत्येक प्रोग्राम के लिए बहुत आवश्यक है) लगभग हमेशा cache
मेमोरी में होती है, इसलिए सिस्टम को स्क्रीन पर "हैलो वर्ल्ड" प्रिंट करने के लिए आवश्यक निर्देशों को खोजने के लिए डिस्क पर नहीं जाना पड़ता है।
यह वास्तव में उससे कहीं अधिक जटिल है - साझा की गई मेमोरी, वायर्ड मेमोरी, आदि - लेकिन हमारे उद्देश्यों के लिए यह सरल स्पष्टीकरण पर्याप्त है।
एक्टिव मेमोरी क्या है?
सक्रिय मेमोरी का एक हिस्सा है जिसे हम "यूज्ड" मेमोरी - रैम के रूप में समझते हैं जो कि एप्लिकेशन जो कुछ भी करते हैं उसका उपयोग कर रहे हैं - स्प्रेडशीट को सॉर्ट करना, वेब पेज की सेवा करना, ग्राफिक्स को संपादित करना, आदि
"सक्रिय" मेमोरी हाल ही में "सक्रिय" रही है - - यह दावा करने वाले कार्यक्रम ने अपनी सामग्री (पढ़ने या लिखने) का उपयोग किया है, और इसे स्वैप करने के लिए एक अच्छा उम्मीदवार नहीं माना जाता है।
निष्क्रिय स्मृति क्या है?
एक्टिव मेमोरी की तरह, इनएक्टिव मेमोरी रैम होती है, जो एप्लिकेशन जो कुछ भी करते हैं उसका उपयोग करते हैं। अंतर यह है कि इस मेमोरी को कुछ समय में एक्सेस नहीं किया गया है, इसलिए यदि पुश को धक्का देने के लिए ओएस आता है, तो लगता है कि इसे डिस्क पर स्वैप किया जा सकता है और (थोड़ी किस्मत के साथ) यह दावा करने वाला प्रोग्राम फिर से इसके लिए नहीं पूछेगा। कभी गौर नहीं करेंगे।
"यूज्ड" मेमोरी (HUMAN परिभाषा) क्या है
आप और मैं जो "यूज्ड" मेमोरी के रूप में सोचते हैं, अनिवार्य रूप से, सक्रिय और निष्क्रिय स्मृति का योग है। वर्तमान में सभी RAM ने उनके उपयोग के लिए अनुप्रयोगों द्वारा दावा किया है।
जब तक आपके पास एक्टिव और इनएक्टिव मेमोरी के योग से अधिक स्थापित RAM है (प्लस का एक अच्छा सुरक्षा मार्जिन 512-1024MB शीर्ष पर है) आप एक ठीक जगह पर हैं: आपका OS शायद स्वैप और प्रदर्शन को मार नहीं रहा होगा ।
"फ्री" मेमोरी (HUMAN परिभाषा) क्या है?
आप और मैं जो "मुक्त" स्मृति के बारे में सोचते हैं वह मेमोरी है जो प्रोग्राम चलाने के लिए उपलब्ध है।
यह आपके "OS" रिपोर्ट की "फ्री" आकृति की तुलना में थोड़ा अधिक जटिल है। जब कोई प्रोग्राम RAM के लिए पूछता है तो ऑपरेटिंग सिस्टम उस रैम को कम से कम विघटनकारी तरीके से प्राप्त करने की कोशिश करेगा:
- यदि मुफ्त मेमोरी उपलब्ध है (कुछ भी नहीं करने के आसपास बैठे हुए) जो कि RAM को आवंटित किया जाएगा।
- यदि कोई मुफ्त मेमोरी उपलब्ध नहीं है, तो OS कैश और बफर स्पेस को कैनालिबलाइज करेगा: बफर पूल में कम से कम / हाल ही में एक्सेस किया गया सामान बाहर फेंक दिया जाएगा, और उस रैम को प्रोग्राम को दिया जाएगा।
- यदि कोई बफ़र / कैश रैम नहीं है, तो स्वैपर को निष्क्रिय करने के लिए निष्क्रिय मेमोरी को देखेंगे और उन क्षेत्रों को चुनें जिन्हें लगता है कि कम से कम एक्सेस होने की संभावना है। यही कारण है कि डेटा जाएगा बाहर पृष्ठांकित स्वैप (डिस्क), और नव मुक्त कर दिया रैम कार्यक्रम के लिए दिया।
- यदि सभी इनएक्टिव रैम को स्वैप कर दिया गया है तो स्वैपर डिस्क पर एक्टिव रैम डालने लगेगा।
(यह उस जगह के बारे में है जहां प्रदर्शन आमतौर पर कुत्तों के लिए जाता है: हर बार जब कोई प्रोग्राम सीपीयू पर अपनी बारी आती है तो उसके स्वैप किए गए बिट्स को रैम में वापस लाने की आवश्यकता होती है, जिसका अर्थ है कि किसी अन्य प्रोग्राम की सक्रिय मेमोरी को स्वैप करना होगा - स्वैप में उच्च कारोबार को थ्रैशिंग कहा जाता है )
- यदि सिस्टम ने सब कुछ स्वैप किया है (और स्वैप विभाजन को भर सकता है), या यदि आप एक स्वैप विभाजन के बिना एक सिस्टम चला रहे हैं , तो खराब चीजें होती हैं। इस बिंदु पर दो चीजों में से एक होगा:
malloc()
असफल हो जायेगी। यह पोसिक्स-अनुरूप व्यवहार है - ऑपरेटिंग सिस्टम रैम के लिए पूछने वाले कार्यक्रम को बताएगा कि यह अनुरोध को संतुष्ट नहीं कर सकता है।
कार्यक्रम या तो कम रैम के लिए पूछ सकता है, या यदि यह मेमोरी का एक छोटा हिस्सा नहीं बना सकता है तो यह साफ हो सकता है और बाहर निकल सकता है। (यदि कार्यक्रम बुरी तरह से लिखा गया है तो यह बस दुर्घटनाग्रस्त हो जाएगा।)
- यदि आप एक लिनक्स बॉक्स पर हैं, तो OOM- किलर एक गैंग-स्टाइल ड्राइव पर जा सकता है , स्प्री को मारकर, अन्य प्रक्रियाओं को समाप्त करके अनुरोध को पूरा करने के लिए पर्याप्त रैम मुक्त करने का प्रयास कर सकता है।
यदि आप मेरे विवरण के बारे में यहाँ और मेरे द्वारा जुड़े प्रश्न पर अपना उत्तर नहीं बता सकते हैं, तो मुझे लगता है कि यह समस्या से निपटने का एक भयानक तरीका है।
जब आप फ़ाइलें हटाते हैं तो Free RAM ऊपर क्यों जाती है?
यहां दिए गए प्रश्न के उदाहरण में आपने देखा कि बैकअप फ़ाइल को हटाकर "फ्री" रैम संभव है - इसके लिए स्पष्टीकरण बहुत सरल है: चूंकि कुछ भी उस फ़ाइल का उपयोग नहीं कर रहा है (कोई खुली फ़ाइल हैंडल नहीं है) और यह अब से सुलभ नहीं है फाइलसिस्टम (अनलिंक) ओएस जानता है कि कोई भी उस डेटा को फिर से एक्सेस नहीं कर सकता है, और यह फाइल सिस्टम कैश से डेटा को शुद्ध करता है।
यह OS रिपोर्ट को अधिक मुक्त मेमोरी बनाता है, लेकिन सिस्टम के प्रदर्शन पर कोई प्रभाव नहीं पड़ता है।