मावेरिक्स और योसेमाइट का "मेमोरी प्रेशर" किस पैमाने या माप का पालन करता है?


57

मावेरिक्स '(और योसेमाइट का) गतिविधि मॉनिटर एक नया आरेख, मेमोरी दबाव भी दिखाता है । अफसोस की बात है, इसका मदद पाठ केवल अस्पष्ट तरीके से बताता है कि यह वास्तव में क्या उपाय करता है। मेमोरी प्रेशर की गणना कैसे की जाती है?

Mavericks गतिविधि मॉनिटर - मेमोरी

चित्र श्रेय Mavericks के सर्वश्रेष्ठ नई सुविधा पर एक पोल सवाल से इस जवाब पर जाते हैं।

जवाबों:


51

मेमोरी प्रेशर मेमोरी फ्री के प्रतिशत का एक साधारण गेज नहीं है और यह 0 से 100% ग्राफ लगता है। sysctlका मूल्य vm.memory_pressureएक गणना लक्ष्य है कि तार और सक्रिय पृष्ठों करने के लिए स्वतंत्र है और निष्क्रिय स्मृति पृष्ठों के बीच का अनुपात पटरियों के संबंध में गणना की जाती है। vm_statआभासी मेमोरी के विस्तृत आवंटन का निरीक्षण करने के लिए कमांड काउंटर टूल का उपयोग करके पूर्ण काउंटर देखे जाते हैं । जोनाथन लेविन के पास http://newosxbook.com/articles/MemoryPressure.html पर उत्कृष्ट दस्तावेज हैं, जो macOS और iOS वर्चुअल मेमोरी दोनों को कवर करते हैं और कैसे वे दबाव के दबाव के साथ-साथ मेमोरी इंडेक्स की गणना करते हैं और जब दबाव इंडेक्स अधिक होता है।

प्रासंगिक वर्चुअल मेमोरी (vm) जो की गणना को खिलाती vm.memory_pressureहैं:

  • vm.page_free_count - मुक्त पृष्ठों की एक निरपेक्ष गणना
  • vm.vm_page_free_target - "दबाव मुक्त" स्थिति के लिए एक गणना लक्ष्य या लक्ष्य
  • vm.page_free_wanted - vm प्रणाली वर्तमान गणना दबाव सूचकांक को कम करने के लिए क्या करना चाहेगी

इसलिए - यदि आप गतिविधि की निगरानी के साथ अपने मेमोरी प्रेशर को ट्रैक कर रहे हैं (या क्रमिक रूप से या कमांड लाइन शेल पर मेरे sysctl मान की जाँच कर रहे हैं) तो आप इन चार मूल्यों को देखने के लिए अच्छा करेंगे:

sysctl -a vm | egrep "page_free|pressure"

memory_pressureमैवरिक्स के साथ एक नई कमांड शुरू की गई है और जब मैं इसे मेमोरी सबसिस्टम को चेतावनी की स्थिति में चलाने के लिए चलाता हूं - तो आप मेमोरी दबाव को एक पीले रंग की सीमा में बढ़ा सकते हैं।

<code> sudo memory_pressure -l चेतावनी </ code> के गतिविधि मॉनिटर परिणाम

टूल को लगभग 4 जीबी मेमोरी के लिए आवंटित किया गया है क्योंकि दबाव ग्राफ इस राज्य में तेजी से बढ़ा है जहां जाहिर तौर पर "चेतावनी" का स्तर रेखांकन है sudo memory_pressure -l warn:। जैसा कि आप देख सकते हैं, दबाव से पहले प्रणाली में 5.9 जीबी का उपयोग किया गया था और बाद में 7.99 जीबी तक का उपयोग किया गया था, जिसे स्वैपिंग और संपीड़न के कारण जोड़ने की आवश्यकता नहीं है।

यह देखने के बाद कि vm_stat 15बिना किसी औसत दर्जे के पेजिंग में चेतावनी परिणाम कैसे दिखा, मैंने टूल (कंट्रोल-सी) छोड़ दिया और फिर मेमोरी प्रेशर को क्रिटिकल बनाने के लिए टूल को फिर से चलाया।sudo memory_pressure -l critical

पेजिंग शुरू होने के बाद मैंने इसे कुछ मिनटों से अधिक नहीं चलने दिया और एक बार जब टूल ने कहा कि मेरे पास डिस्क में 5 जीबी रैम है, मैं अपनी ड्राइव को भरना नहीं चाहता था और टूल को छोड़ दिया था।

<code> sudo memory_pressure -l महत्वपूर्ण </ code> के गतिविधि मॉनिटर परिणाम

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


स्पष्टीकरण के लिए धन्यवाद। मैं यह जानना चाहूंगा कि क्या कोई कमांड (या कमांड सेट) है जो ऊपर दी गई स्क्रीन शॉट में वर्चुअल मेमोरी, फाइल कैश और ऐप मेमोरी पैरामीटर की गणना करता है।
मुहम्मद हसन नसर

@MuhammadHassan नीचे दिया गया उत्तर एल्गोरिथ्म का एक अच्छा रिवर्स इंजीनियरिंग सारांश शामिल करता है और बताता है कि xnuइंटर्न के लिए खुले स्रोत में कहाँ देखना है । मैंने 4 मानों को कवर किया है जो दबाव के GUI प्रदर्शन के लिए सबसे अधिक प्रासंगिक हैं।
bmike

30

कुछ हद तक स्पष्ट करने और उस अनुमान को अधिक सटीक बनाने के लिए: मेमोरी दबाव कर्नेल (विष्णु) द्वारा उपयोग किया जाने वाला मीट्रिक है जिसे मेमोरी_स्टैटस (जिसे जेट्सम के रूप में जाना जाता है) नामक एक समर्पित धागे के साथ उपयोग किया जाता है। यह थ्रेड यह पता लगाने के लिए ज़िम्मेदार है कि उपलब्ध रैम कम होने पर - जो कि OS X में स्वैपिंग को बाध्य कर सकता है, और iOS में उच्चतम मेमोरी खपत करने वाले ऐप को मारता है (जैसा कि कोई स्वैप नहीं है)। मावेरिक्स में, दो ओएस एक साथ करीब हैं। मेमोरीस्टैटस एक कर्नेल नोट जारी करता है, जिसे ओबज-सी रनटाइम अंततः एक ऐपड्रेड्रेसिवलोमोमेरीवर्निंग में अनुवाद करता है। ऐप्स अप्रयुक्त या एक्सट्रॉनिक मेमोरी (उदाहरण के लिए, कैश) को शुद्ध करने वाले हैं। डार्विन की libC भी स्मृति को स्वचालित रूप से शुद्ध करती है।

एक विशिष्ट (हालांकि अनिर्दिष्ट) सिस्टम कॉल है, vm_pressure_monitor (# 296, अगर मुझे सही याद है), जो एक ग्राहक को दबाव की घटनाओं पर सुनने देता है, और देखता है कि कितने भौतिक पृष्ठों को पुनः प्राप्त किया जा सकता है।

आप ओएस एक्स के लिए प्रोसेस एक्सप्लोरर का उपयोग करके मैवरिक्स पर दबाव की घटनाओं को देख सकते हैं - http://newosxbook.com/index.php?page=downloads से डाउनलोड करने योग्य । यह दोनों आपको दबाव "गेज" दिखाता है, साथ ही साथ दबाव घटना भी।


उस वेबसाइट पर एक विस्तृत लेख भी है - newosxbook.com/articles/MemoryPressure.html - ओएस एक्स और आईओएस में मेमोरी प्रेशर और हैंडलिंग का
विस्तार

Mavericks और iOS कर्नेल के बीच समानता और अंतर पर बहुत बढ़िया विवरण। प्रोसेस एक्सप्लोरर के लिंक के लिए धन्यवाद।
bmike

14

मेमोरी दबाव को दो काउंटर्स द्वारा परिभाषित किया जाता है, जिसे माच आंतरिक रूप से रखता है:

  • vm_page_free_count: वर्तमान में RAM के कितने पृष्ठ मुफ्त हैं
  • vm_page_free_target: RAM के कितने पृष्ठ न्यूनतम, कम से कम, मुफ्त में होने चाहिए।

आप इन्हें आसानी से sysctl का उपयोग करके देख सकते हैं:

morpheus@Zephyr (~/Documents) % sysctl -a vm | grep page_free
vm.vm_page_free_target: 2000
vm.page_free_wanted: 0
vm.page_free_count: 73243

यदि नि: शुल्क पृष्ठों की राशि लक्ष्य राशि से कम हो जाती है - हमारे पास दबाव की स्थिति है।


से http://newosxbook.com/articles/MemoryPressure.html

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