मेमोरी पूर्ण होने से पहले विंडोज 2008 स्वैप का उपयोग क्यों करता है?


9

मैं एक Windows 2008 सर्वर (अमेजन EC2 पर) अच्छी तरह से IIS और .NET वेब ऐप चला रहा हूं। मुझे दूसरे दिन एक मेमोरी अलर्ट मिला और जाकर देखा, और निश्चित रूप से कुछ समय के लिए धीमी गति से रिसाव के माध्यम से प्रक्रिया की स्मृति काफी बढ़ गई थी। यह 60M से 200M की तरह बहुत अधिक नहीं बढ़ा, लेकिन बॉक्स के साथ पर्याप्त चल रहा था कि यह मॉनिटर को सेट करने के लिए हमारे बहुत कम सीमा (75%) पर चला गया।

मैंने ऐप के पूल को रीसायकल किया और मेमोरी फ़्री हो गई, और मैंने उन आँकड़ों की समीक्षा करने पर ध्यान दिया कि स्वैप स्पेस का काफी उपयोग किया जा रहा था और 1 जीबी से अधिक उस रीसायकल से मुक्त हो गया।

हो सकता है कि यह एक बुनियादी सवाल है, लेकिन मैं एक यूनिक्स लड़का हूं और जब तक आप मेमोरी से बाहर नहीं निकल जाते, तब तक मैं स्वैप नहीं करता। यह बॉक्स 75% मेमोरी उपयोग से ऊपर कभी नहीं गया है। क्या यह विंडोज की चीज है या .NET की चीज है या अमेजन की चीज है? मुझे संदेह है कि संदिग्ध की तुलना में इस ऐप में बहुत बड़ी मेमोरी लीक है - यह 60M से 200M तक लीक नहीं है, यह 60M से 1.2GB तक लीक हो रहा है, लेकिन इसमें से बहुत कुछ "ठंडा" हो रहा है और स्वैप करने के लिए बाहर निकाला जा रहा है?

मेरे पास एप्लिकेशन पूल पर मेमोरी रिसाइक्लिंग सेट है, लेकिन यह बॉक्स फुल मेमोरी को ट्रिगर करता है, इसलिए यह ऐप स्वचालित रूप से साइकिल चलाने से पहले वास्तव में, वास्तव में बड़ा हो सकता है।

मैं नियमित "समयबद्ध" पुनर्चक्रण सेट कर सकता था, लेकिन यह एक कारगर तरीका है, मैं ऐप को ठीक करने के लिए देवता को प्राप्त करूंगा लेकिन यह समझने की आवश्यकता है कि स्वैप उपयोग के साथ यहां क्या हो रहा है यह सुनिश्चित करने के लिए कि मैं यह सही समझ रहा हूं।

अधिक जानकारी के साथ संपादित करें: उदाहरण स्मृति: 1.7 जीबी स्वैप: 4.5 जीबी

मैं कार्यसमूह में w3wp.exe प्रक्रिया देखता हूं जो कि मेमोरी दिखा रहा है: 211,000k। लेकिन जब मैंने इसे फिर से शुरू किया (यह अपने स्वयं के ऐप पूल में है, और यह बॉक्स पर एकमात्र ऐप है), तो इसकी मेमोरी का उपयोग अपने सामान्य शुरुआती बिंदु 60 एम तक चला गया और 1 जीबी + की तरह स्वैप भी मुक्त हो गया। टास्कमग्र में मेरे पास सामान्य मेमोरी (प्राइवेट वर्किंग सेट) स्टैट अप था, लेकिन मेरे अन्य मॉनिटरिंग (क्लाउडिक) के माध्यम से स्वैप में बदलाव देखा गया। वापस जा रहे हैं और आज इसे देख रहे हैं, स्मृति 195M तक की प्रक्रिया (1.2 GB कुल) पर वापस आ गई है और स्वैप 1.0 GB से 1.1 GB तक क्रेप हो गया है, वापस जाने के सभी तरीके नहीं खरीदे हैं जहाँ यह था (समय के साथ रेखांकन) धीमी रेंगना)।

मैं इस विशिष्ट ऐप के बारे में कम चिंतित हूँ और अधिक समझने के बारे में चिंतित हूँ जब विंडोज स्वैप करता है और यह कैसे उपयोग करता है, और सामान्य रूप से दी गई विंडोज मेमोरी और स्वैप उपयोग के बारे में क्या चिंतित होना चाहिए।


4
BTW, कम से कम लिनक्स अवसरवादी रूप से पृष्ठों की अदला-बदली करेगा यदि उन्हें लंबे समय तक एक्सेस नहीं किया गया है, भले ही सिस्टम सभी उपलब्ध रैम का उपयोग करने के करीब न हो। यह डिस्क कैश, बफ़र्स, आदि के लिए मेमोरी को मुक्त करने के लिए करता है
EEAA

इस उदाहरण में कितनी मेमोरी है? क्या आप कह रहे हैं कि w3wp.exe प्रक्रिया 1GB मार रही है? क्या यह उस एप्लिकेशन पूल में चलने वाली एकमात्र साइट है?
केव

@ केवी ने आपके अनुरोध पर क्यू में अधिक जानकारी जोड़ी।
अर्नेस्ट म्यूएलर

@ एरिक, यह जानकर अच्छा लगा, मुझे लगता है कि मैंने उन लोगों की बात सुनी है जो कहते हैं "यदि आप स्वैप कर रहे हैं तो आपको पहले ही बकवास प्रदर्शन मिल गया है, बस स्वैप पूरी तरह से बंद कर दें और रैम से बाहर न निकलें" इसलिए मैं डॉन ' टी घड़ी स्वैप ज्यादा है।
अर्नेस्ट म्यूएलर

यदि आपकी डिस्क डिस्क से टकरा रही है, तो यह सच है। यदि यह स्वैप होता है, तो यह बफ़र्स और ऐसे के लिए जगह बना रहा है।
बार्ट सिल्वरस्ट्रिम

जवाबों:


17

विंडोज और लिनक्स में दो अलग-अलग पृष्ठ / स्वैप रणनीतियाँ हैं।

लिनक्स

लिनक्स स्वैप स्पेस का उपयोग करने से बचना चाहता है, और आखिरी समय तक इंतजार करता है। यदि आपको लिनक्स में बड़ी मात्रा में स्वैप दिखाई देता है, तो आपकी प्रणाली की संभावना है या वह परेशानी में था। यह रणनीति समग्र डिस्क i / o को कम करने के लिए अच्छी है, जो आपके सिस्टम का सबसे धीमा हिस्सा है, लेकिन प्रकाश और भारी भार की वैकल्पिक अवधि (और ईमानदारी से, यह हम में से है) के साथ सिस्टम के लिए कमजोर है। वह समय जब आपका भार पहले से ही भारी है, अब "अतिरिक्त" डिस्क i / o पर बोझ हो जाएगा, या, एक और तरीका है, तो आपको अपने सर्वर को एक आंख के साथ डिजाइन करने की आवश्यकता है जिसमें पर्याप्त राम होने के लिए आप स्वैप के दौरान भी स्वैप नहीं करते हैं उच्चतम अपेक्षित लोड समय।

खिड़कियाँ

विंडोज मेमोरी को पेज फाइल के मात्र कैश के रूप में व्यवहार करना चाहता है। आपकी वास्तविक मेमोरी हमेशा डिस्क पर होती है, लेकिन यह "कैश" से पढ़ेगा / लिखेगा सबसे पहले अगर यह कर सकता है। यह रणनीति शाम को आपके लोड के लिए अच्छा है; जब सिस्टम व्यस्त हो जाता है और पृष्ठों को स्वैप करने की आवश्यकता होती है, तो वर्तमान पृष्ठ पहले से ही डिस्क पर है और आधा काम पहले से ही किया गया है। जब विंडोज युवा था, तब इस दृष्टिकोण ने बहुत बड़ा अर्थ लगाया था, 32 एमबी (भूल जीबी) अभी भी बहुत अधिक रैम था, और स्वैप स्थान का उपयोग करने की लगातार आवश्यकता एक दी गई थी। आज भी यह कार्य-भार के लिए अच्छा है जो प्रकाश और व्यस्त भार के बीच वैकल्पिक है, क्योंकि यह डिस्क को i / o को समय से अधिक समान रूप से फैलाने में मदद करता है।

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

कन्वर्जेंस

आभासी वातावरण और क्लाउड सर्वर के आगमन के साथ, एक परीक्षण वातावरण में लोड को मापने या भविष्यवाणी करने की यह अवधारणा पहले और फिर लोड ज्ञात होने पर उत्पादन संसाधनों का आवंटन, सिस्टम बिल्डिंग में अपेक्षाकृत हालिया विकास, या संभवत: कम से कम व्यावहारिक है। । आपके भार के आधार पर, आप सिस्टम को ऐसे डिज़ाइन कर सकते हैं कि इसे कभी भी स्वैप करने की आवश्यकता न हो। इन मामलों में, विंडोज आपको पेजिंग को बंद करने और लिनक्स सिस्टम की तरह अधिक व्यवहार करने की अनुमति देता है। हालांकि, आपको सावधान रहना होगा; यदि आपके सिस्टम डिज़ाइन में अपेक्षा से अधिक मेमोरी की आवश्यकता है तो आप इस तरह से खुद को परेशानी में डाल सकते हैं।

दूसरी ओर, आधुनिक लिनेक्स कर्नेल, स्वैच्छिक रूप से डिस्क की तुलना में स्वैच्छिक रूप से स्वैप करने के लिए तैयार हैं, जो कि एक बार थे। तो दो प्रणालियों के बीच स्मृति प्रबंधन रणनीतियों में अंतर अभी भी मौजूद है, लेकिन अब पहले की तुलना में कम अलग था। दोनों प्रणालियों की अपनी खूबियां हैं, और प्रत्येक दूसरे को यह देखने के लिए देखता है कि वे किन अग्रिमों को कॉपी कर सकते हैं।


विंडोज अंत रणनीति पर बहुत विशिष्ट, धन्यवाद! इस Microsoft KB से मुझे भी मान्य ... support.microsoft.com/kb/2267427
अर्नेस्ट म्यूलर

1
जब तक आप स्पष्ट रूप से vm.swappiness = 0 सेट नहीं करते, तब तक लिनक्स अंतिम संभव क्षण की प्रतीक्षा नहीं करता है। डिफ़ॉल्ट मान 60 पर, यह उन पृष्ठों को स्वैप कर देगा जिन्हें कुछ समय में स्पर्श नहीं किया गया है।
Kjetil Joergensen

@KjetilJoergensen सुनिश्चित करें कि आपने अभिसरण पर अंतिम अनुभाग पढ़ा है।
जोएल कोएल

1
@JoelCoel मैं बिना सोचे समझे अपनी आलोचना :)
Kjetil Joergensen

7

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

लिनक्स के तहत आप इस व्यवहार को /procफाइल सिस्टम में प्रासंगिक "स्वप्नशीलता" मूल्यों में फेरबदल कर सकते हैं (ब्लॉक कर सकते हैं) - इसमें कोई संदेह नहीं है कि रजिस्ट्री मूल्य हैं जिन्हें आप बदल सकते हैं कि विंडोज इस संबंध में भी कैसे व्यवहार करता है।

एक और बात का ध्यान रखें कि जब कोई चीज बाहर रखी गई हो और बाद में वापस पढ़ी जाए, तो कर्नेल इसे पेज फाइल से तब तक नहीं हटाएगा, जब तक कि फाइल पूरी तरह से भर न जाए या रैम में पेज बदल न जाए। इस तरह अगर उसे उस पृष्ठ को फिर से चंक करने की आवश्यकता है, तो वह ऐसा कर सकता है बिना वास्तव में पृष्ठों को डिस्क पर लिखे: सामग्री पहले से ही है। यह उन स्थितियों में प्रदर्शन में बहुत सुधार कर सकता है जहां मेमोरी ओवर-कम इतनी खराब हो गई है कि पेज फाइल्स के थ्रेशिंग (पेजों की महत्वपूर्ण संख्या लगातार और बाहर मैप की जा रही है)। आपको यह पता लगने की संभावना है कि कुछ डेटा को उस मेमोरी लीक से धकेल दिया गया था, और तब से वापस पढ़ा जा रहा है, लेकिन डिस्क से नहीं मिटाए जाने की स्थिति में उन पन्नों को मैप करने या फिर बाद में कमरा बनाने के लिए RAM की आवश्यकता होती है। लिनक्स के तहत, "स्वैच्च्ड" मूल्य में/proc/meminfoदिखाता है कि रैम और डिस्क में समान प्रतियों वाले डेटा कितने पृष्ठों में मौजूद हैं। विंडोज कोई संदेह नहीं है एक ही अनुकूलन (या कुछ इसी तरह) का उपयोग करता है, लेकिन मैं यह देखने के लिए बिल्कुल नहीं हूं कि यह देखने के लिए कि यह कितना हो रहा है (इसमें कोई संदेह नहीं है कि प्रासंगिक प्रदर्शन मॉनिटर काउंटर आप क्वेरी कर सकते हैं)।

tl; dr: यह सामान्य है। एक आधुनिक ओएस कर्नेल चतुर होने की कोशिश करेगा और I / O संचालन को बचाने के लिए कैश के रूप में कितना रैम का उपयोग कर सकता है, और कभी-कभी डिस्क में कॉपी किए गए डेटा और RAM में I / O को बचाने के लिए होगा यदि इसे उन बिट्स को पृष्ठ से बाहर करने की आवश्यकता है राम की बाद में। संभावना है, काउंटर सहज हो, जैसा कि हो सकता है, कि इन दो तरीकों से पेज फ़ाइलों का यह उपयोग, भले ही आप वर्तमान में रैम पर कम नहीं हैं, यह कम करने के बजाय आपके समग्र प्रदर्शन में सुधार कर रहा है।

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