जब "निष्क्रिय मेमोरी" बहुत होती है तो OS X स्वैप का उपयोग क्यों करता है?


22

मैं कुछ महीनों (सिंह और अब माउंटेन शेर) से ओएस एक्स का उपयोग कर रहा हूं। मेरे मिनी पर 8 जीबी है और लगभग रोजाना अब यह उसी के करीब है। 8 जीबी के साथ विंडोज 7 मशीन पर मुझे उस तरह की समस्या कभी नहीं हुई। वैसे भी, मैं नेट पर पढ़ता हूं, कि निष्क्रिय मेमोरी उन कार्यक्रमों का ऐप कैश है जो हाल ही में बंद हैं और तेजी से फिर से खोलने के लिए इस्तेमाल किया जा सकता है। और इस निष्क्रिय मेमोरी को जरूरत पड़ने पर एक नए ऐप पर जारी किया जा सकता है। यह जारी नहीं किया गया है। इसके बजाय OS X स्वैप करना शुरू कर देता है। तो मेरा सवाल यह है कि "निष्क्रिय स्मृति" के बहुत होने पर ओएस एक्स स्वैप का उपयोग क्यों करता है? यहाँ एक स्क्रीन है जो दिखाता है कि मेरा क्या मतलब है:

यहां छवि विवरण दर्ज करें

मैं वास्तव में आशा करता हूं कि स्वैपिंग शुरू करने से पहले उन 2.69 जीबी का उपयोग करने के लिए ओएस एक्स बनाने के लिए एक दूर है। मैं वास्तव में करता हूं।


हाँ, यह अजीब है। यह एक आवेदन सभी रैम ले रहा है? शायद OSX अनुप्रयोगों को एक साथ 80% से अधिक रैम का उपयोग नहीं करने की सीमा रखता है। हालांकि निष्क्रिय इसका मतलब मुक्त नहीं है। यह कुछ के लिए आरक्षित है।
पिओटर कुला

नहीं - कई ऐप्स, ब्राउजर, एक्लिप्स और आदि से जो मैंने पढ़ा है वह मुफ़्त है क्योंकि हाल ही में बंद किए गए ऐप कैशे हैं। ओएस एक्स को स्वैप नहीं करने का तरीका होना चाहिए जब निष्क्रिय मेमोरी हो
Balchev

मैं इसे कभी भी पुन: पेश कर सकता हूं और जरूरत पड़ने पर एक्टिविटी मॉनिटर की एक स्क्रीन बना सकता
हूं

2
निष्क्रिय स्मृति मुक्त स्मृति नहीं है।
किनोकिजुफ

2
@kinokijuf, हालांकि, मुफ्त मेमोरी के रूप में कार्य करना चाहिए जब कोई मुफ्त मेमोरी नहीं बची हो। यदि निष्क्रिय मेमोरी को हमेशा डिस्क पर स्वैप किया जाता है, तो सक्रिय - निष्क्रिय अंतर बनाने में कोई वास्तविक बिंदु नहीं है।
पीटर

जवाबों:


18

स्वैपिंग स्पष्ट रूप से तब हुई जब निष्क्रिय रैम पेज वास्तव में सक्रिय थे।

( अपडेट: जैसा कि एक टिप्पणी में स्पष्ट किया गया था, यह आपका मामला नहीं है। इसलिए समान समस्या वाले लोग क्षैतिज नियम को आगे छोड़ सकते हैं ।)

यानी आपके पास कई कार्यक्रम चल रहे थे और कर्नेल ने कुछ पृष्ठों की अदला-बदली की। फिर आपने कुछ कार्यक्रमों को चुना। कर्नेल उनके RAM पृष्ठों को निष्क्रिय के रूप में चिह्नित करता है। लेकिन जब तक इन पेजों की जरूरत नहीं होगी, तब तक यह रैम को वापस स्वैप नहीं करेगा। इससे निष्क्रिय और अदला-बदली वाले पृष्ठ दोनों बन जाते हैं।

क्यों नहीं preemptively swapping में पृष्ठों? क्योंकि यह बाधाओं के विरुद्ध होगा: लंबे समय में आप हार जाते हैं। आइए एक सरल उदाहरण के बारे में सोचते हैं: दो प्रोग्राम ए और बी जो एक ही समय में रैम में फिट नहीं होते हैं। प्रोग्राम A अभी भी चल रहा है और सभी अदला-बदली वाले पृष्ठ A. प्रोग्राम B से संबंधित हैं और सभी निष्क्रिय पृष्ठ B से संबंधित हैं।

यदि कर्नेल प्रीमेप्टीली स्वैग-इन A के पृष्ठों में और उसके बाद

  • कार्यक्रम A को पृष्ठों तक पहुंचने की आवश्यकता है -> आप जीतते हैं - पृष्ठ पहले से ही रैम में हैं।
  • आप बी को फिर से लॉन्च करते हैं -> आप हार जाते हैं - आप पृष्ठों को रैम में लाने के लिए लागत का "भुगतान" करते हैं और अब आपको उन्हें वापस भेजना होगा।
  • यदि आप A और C एक ही समय में RAM में फिट नहीं होते हैं, तो आप एक और प्रोग्राम C -> खो देते हैं। अगर वे फिट हैं, तो आप भी हैं।

यह भी ध्यान रखें कि स्वैपिंग-आउट (डिस्क से लिखना) स्वैपिंग-इन (डिस्क से पढ़ना) की तुलना में अधिक महंगा है। जो इस "शर्त" को और भी अधिक अप्राप्य बनाता है।

संक्षेप में: अपनी कर्नेल पर भरोसा करें और इसे आउटसोर्स करने का प्रयास न करें।


अद्यतन: यह बताता है कि निष्क्रिय मेमोरी काम नहीं करती है क्योंकि सिस्टम मेमोरी आर्टिकल पढ़ने के लिए एक्टिविटी मॉनिटर का उपयोग करने से कई लोगों को विश्वास होता है कि यह काम करता है। निष्क्रिय मेमोरी के लिए लेख में दी गई परिभाषा सही है:

यह जानकारी रैम में है लेकिन इसका सक्रिय रूप से उपयोग नहीं किया जा रहा है, हाल ही में इसका उपयोग किया गया था।

लेकिन निम्नलिखित उदाहरण पूरी तरह से भ्रामक और अति-सरलीकृत है (जैसे मेरा उदाहरण फ्रैंक होना):

उदाहरण के लिए, यदि आप मेल का उपयोग कर रहे हैं और फिर इसे छोड़ दें, तो मेल का उपयोग करने वाला RAM निष्क्रिय मेमोरी के रूप में चिह्नित है। नि: शुल्क मेमोरी की तरह, एक अन्य एप्लिकेशन द्वारा उपयोग के लिए निष्क्रिय मेमोरी उपलब्ध है। हालाँकि, यदि आप किसी अन्य अनुप्रयोग द्वारा इसकी निष्क्रिय स्मृति का उपयोग करने से पहले मेल खोलते हैं, तो मेल त्वरित रूप से खुल जाएगा क्योंकि इसकी निष्क्रिय स्मृति को सक्रिय मेमोरी में बदल दिया जाता है, बजाय इसे धीमे ड्राइव से लोड करने के।

मैंने अधिक ऑनलाइन संसाधनों की खोज की और डार्विन कर्नेल मेलिंग सूची में इस थ्रेड तक समाप्त हो गया जो काफी जानकारीपूर्ण है। जिम मेगी को उद्धृत करते हुए (डार्विन टीम से - मुझे लगता है):

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

जैसा कि आपने खोजा, आंतरिक संतुलन हम (वर्तमान में) के लिए प्रयास करते हैं लगभग 2/3 सक्रिय बनाम 1/3 निष्क्रिय ...

यह आपके द्वारा देखे गए व्यवहार की व्याख्या करता है। यानी आपके द्वारा देखे जाने वाले निष्क्रिय पृष्ठ उन चल रहे कार्यक्रमों से संबंधित हैं जिनका हाल ही में उपयोग नहीं किया गया है। इसलिए, जब आप एक नया प्रोग्राम फायर करते हैं, तो निष्क्रिय पृष्ठों की अदला-बदली होती है। उसी समय सक्रिय बनाम निष्क्रिय के 2/1 अनुपात को बनाए रखने के लिए अन्य कार्यक्रमों के पृष्ठों को निष्क्रिय के रूप में चिह्नित किया जाता है।

धागा भी डार्विन internals के बारे में अधिक जानने के लिए कुछ सुझाव दिए गए हैं। समुद्र तट की समस्याओं के कारण मेमोरी उपयोग की जांच शुरू करने के मामले में कुछ सुझाव भी हैं (जो आमतौर पर इसके साथ बहुत कम हैं)।

निष्कर्ष समान है: अपनी गिरी पर भरोसा करें और इसे बाहर करने की कोशिश न करें। :-)


1
नमस्ते, निश्चित नहीं कि आप मुझे समझ रहे हैं - मैं उस क्षण के लिए बात कर रहा हूं जब आपको 100-200MB की मुफ्त मेमोरी, 2.6 जीबी "निष्क्रिय" पसंद है और एक और कार्यक्रम शुरू करते हैं, आइए ग्रहण, एक्सकोड और आदि कहते हैं कि ऐसा क्या होता है कि यह उन का उपयोग नहीं करता है 2.6 जीबी और इसके बजाय सक्रिय मेमोरी से स्वैप करें। निश्चित रूप से अगर आपको मेरा मतलब है, तो मिलें। फिर भी, आपके उत्तर के लिए धन्यवाद
Balchev

यह अब स्पष्ट है। हो सकता है कि आपको इस टिप्पणी में अपने प्रश्न में उदाहरण जोड़ना चाहिए। मैंने अतिरिक्त जानकारी जोड़ी है जो मुझे लगता है कि आप जो भी देखते हैं उसके लिए पर्याप्त विवरण प्रदान करते हैं।
m000

यकीन नहीं होता कि मैं अपना मूल उत्तर संपादित करूंगा। यह एक अलग मामले की व्याख्या करता है (जैसा कि मुझे आपकी टिप्पणी से ठीक पहले आपका सवाल नहीं मिला) और लोगों को भ्रमित कर सकता है।
एमटी

तो जैसा कि रेडू ने अपनी टिप्पणी में कहा है - "ओएस एक्स एक भूखा जानवर है"। मैं उम्मीद नहीं कर रहा था कि OS X उस मेमोरी मेमोरी (लायन और अब माउंटेन लायन दोनों) के भूखे होंगे और इसीलिए मुझे लगा कि यहाँ कुछ गड़बड़ है। आप अपने अपडेटेड जवाब के लिए धन्यवाद।
बालचेव

6

यदि आपके पास पर्याप्त राम है तो आप सुरक्षित रूप से पेजिंग को अक्षम कर सकते हैं।

इन आदेशों का प्रयास करें।

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
sudo rm /private/var/vm/swapfile*

फिर पुनरारंभ करें और सत्यापित करें कि डायनेमिक_पेजर प्रक्रिया अब नहीं चल रही है।

सुनिश्चित करें कि कोई भी स्वैफ़िल नहीं बनाए गए थे /private/var/vm/

निम्नलिखित आदेशों को पुन: सक्षम करने के लिए:

sudo launchctl load -wF /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist

आप अधिक रैम को मुक्त करने और डिस्क गतिविधि को कम करने के लिए स्पॉटलाइट को अक्षम कर सकते हैं। स्पॉटलाइट को निष्क्रिय और सक्षम करने के लिए निम्न कमांड का उपयोग किया जाता है।

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.metadata.mds.plist
sudo launchctl load -wF /System/Library/LaunchDaemons/com.apple.metadata.mds.plist

मैंने नेट पर पढ़ा कि OSX पर स्वैप को अक्षम करने से सिस्टम का अप्रत्याशित व्यवहार और क्रैश हो सकता है। क्या ये सच है?
बालकेव

जब आपकी मेमोरी कम होगी तो यह होगा। लेकिन अगर आपके पास 8 जीबी की तरह पर्याप्त मेमोरी है, तो यह किसी भी समस्या का कारण नहीं होगा।
अरुणदेव

2
"पर्याप्त मेमोरी, जैसे 8 जीबी" - क्षमा करें, यह बहुत प्यारा है ... :)
बॉम्बे

0

बहुत कुछ नहीं है जो आप कर सकते हैं। ऐसा क्यों करता है? क्योंकि यह बस ओएस एक्स कैसे काम करता है। दिलचस्प हिस्सा यह है कि मैक को प्राप्त हर नींद के साथ कब्जा की गई मेमोरी कैसे बड़ी हो रही है।

तुम क्या कर सकते हो:

  1. रैम को अपग्रेड करें।
  2. जब भी आवश्यक हो, अधिकांश निष्क्रिय मेमोरी को खाली करने के लिए पवित्र " पर्ज " कमांड चलाएं ।
  3. स्वैप अक्षम करें http://osxdaily.com/2010/10/08/mac-virtual-memory-swap/

नमस्ते, मैंने purge कमांड का उपयोग किया, लेकिन अधिकांश समय यह "निष्क्रिय" मेमोरी के आधे से कम मुक्त था। मैंने पढ़ा है कि OSX पर स्वैप अक्षम करने से सिस्टम का अप्रत्याशित व्यवहार हो सकता है और क्रैश हो सकता है। अगर मैं 1 के साथ चला गया) अब यह 16 जीबी के साथ ठीक है :) बस स्मृति का उपयोग सर्वर के लिए होना चाहिए, डेस्कटॉप के लिए नहीं :) धन्यवाद आपका उत्तर
बालचेव

मैं अपने मैकबुक पर 16GB है Pro, यह एक सर्वर नहीं है। :) यह अच्छी तरह से ज्ञात है कि ओएस एक्स एक भूखा जानवर है जब यह स्मृति में आता है, खासकर जब एक ही समय में कई मध्य / बड़े ऐप का उपयोग किया जाता है। मैंने उन सभी 16GB को बिना किसी इमेज / वीडियो एडिटिंग सॉफ्टवेयर के खोलने में कामयाबी हासिल की, बस कुछ गेम और छोटे ऐप। निष्क्रिय स्मृति लगभग 4GB थी ...

आपको यह भी ध्यान रखना चाहिए कि OS X के कई ऐप पहले से ही 64bit के हैं। स्थान को बड़ा होने के कारण 64 बिट ऐप्स 32 बिट ऐप्स से अधिक मेमोरी आवंटित करते हैं।

0

सिस्टम डिज़ाइन के अनुसार काम कर रहा है। यहां तक ​​कि जब कोई मेमोरी दबाव नहीं होता है, तो यह कुछ पृष्ठों को लिखने के लिए समझ में आता है जिन्हें त्याग नहीं किया जा सकता है, लेकिन सिस्टम के व्यस्त नहीं होने पर हाल ही में स्वैप करने के लिए उपयोग नहीं किया गया है। इस तरह, अगर बाद में मेमोरी प्रेशर होता है, तो इन पेजों को रैम से बेदखल किया जा सकता है, जबकि सिस्टम के व्यस्त होने के कारण उन्हें पहले स्वैप करने के लिए नहीं लिखा जाता है।


1
यह बुरी तरह से डिजाइन किया गया है। यह स्वैप स्थान आवंटित करने और उपयोग करने में बहुत आक्रामक है।
मेंडोटा

इससे क्या फर्क पड़ता है? यदि बहुत सारी मुफ्त स्वैप हैं, तो स्वैप स्थान आवंटित करना हानिरहित है। यह विशेष रूप से सच है जब स्वैप में आवश्यक डेटा नहीं होता है क्योंकि आवंटन को हटाने से कोई लागत नहीं होती है। यह अच्छा डिजाइन है - कड़ी मेहनत करना जब बाद में सिस्टम के दबाव में होने के बजाय इसे लगभग बेकार कर दिया जाता है।
डेविड श्वार्ट्ज

2
जब यह बहुत आक्रामक होता है तो इसका डिज़ाइन खराब होता है और कार्यक्रमों में हकलाने या हैंग होने का कारण बनता है कि यह गलती से निष्क्रिय हो जाता है और स्वैप में जाने लगता है। इस बीच राम में एक और आठ गीगा मुफ्त हैं: /
मेंडोटा

मैं मेंडोटा से सहमत हूं। एक बार जब मैं पूरी तरह से स्वैप में अक्षम हो जाता हूं, तो मेरा सिस्टम बिना किसी रूकावट के आसानी से चल रहा है।
एंटन कुज़मिन

@AntonKuzmin वास्तव में इस सवाल के बारे में कुछ नहीं करना है। यदि आप इस प्रश्न को पढ़ते हैं, तो यह हकलाने या किसी भी समस्या के बारे में कुछ भी नहीं कहता है।
डेविड श्वार्ट्ज
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.