Windows Server 2008 R2 चल रहे फाइल सर्वर्स में से एक को उच्च RAM लोड की समस्या का सामना करना पड़ा जिसके परिणामस्वरूप सर्वर और एप्लिकेशन प्रदर्शन में समस्याएँ आईं। यह पता चला कि मेमोरी सिस्टम फाइल कैश द्वारा भर गई थी जिसमें फाइल सिस्टम मेटाडेटा था। यह समस्या संभावित रूप से उन सभी फाइल सर्वर्स को प्रभावित करती है जिनमें बड़ी संख्या में फाइलें होती हैं जिन्हें उपयोगकर्ताओं द्वारा एक्सेस किया जाता है। यह x64 Windows संस्करणों के लिए सबसे महत्वपूर्ण है, जिसमें मेटाडेटा फाइल का आकार मेमोरी में लगभग पूरे RAM के आकार तक बढ़ सकता है।
Windows फाइल सर्वर पर उच्च RAM लोड
समस्या इस प्रकार प्रकट होती है: टास्क मैनेजर में हम देखते हैं कि फिजिकल मेमोरी 95-99% द्वारा व्यस्त है।

Processes टैब में, असामान्य रूप से उच्च मेमोरी खपत वाली कोई लीक प्रक्रिया नहीं है। इसके अलावा, यदि आप सभी प्रक्रियाओं द्वारा उपयोग की जाने वाली मेमोरी के अनुमानित मूल्यों को जोड़ते हैं, तो आपको अपने सर्वर पर मौजूद फिजिकल मेमोरी का 50% भी नहीं मिलेगा। तो मेमोरी क्या खा रहा है?

RAM उपयोग पर वास्तविक डेटा छोटी उपयोगिता - RAMMap (मार्क रुसिनोविच द्वारा) की मदद से प्राप्त किया जा सकता है। टूल वाले आर्काइव को डाउनलोड करें और एडमिनिस्ट्रेटर विशेषाधिकारों के साथ RAMMap.exe चलाएँ। Use Counts टैब में, हम देखते हैं कि Metafile RAM की सबसे बड़ी मात्रा का उपयोग कर रहा है। (हमारे मामले में, यह सर्वर के 25 GB RAM में से 11 GB उपयोग कर रहा है)।

Windows में मेटाफाइल क्या है?
एक मेटाफाइल सिस्टम कैश का एक हिस्सा है जिसमें NTFS मेटाडेटा होता है और फाइलों तक पहुँचते समय फाइल सिस्टम के प्रदर्शन को बढ़ाने के लिए उपयोग किया जाता है। NTFS मेटाडेटा में MFT (मास्टर फाइल टेबल) का डेटा शामिल होता है। उपयोगकर्ताओं द्वारा एक्सेस की गई प्रत्येक फाइल या फोल्डर के लिए, मेटाफाइल में कम से कम 1 KB का एक संबंधित ब्लॉक बनाया जाता है (प्रत्येक फाइल के एट्रिब्यूट का रिकॉर्ड 1 KB है, और प्रत्येक फाइल में कम से कम एक एट्रिब्यूट होता है)। इस प्रकार, बड़ी संख्या में फाइलों वाले फाइल सर्वर्स पर, मेटाफाइल का आकार (NTFS कैश) कई दसियों गीगाबाइट से अधिक हो सकता है।
इस कैश को अक्षम करना या बिल्ट-इन Windows टूल्स का उपयोग करके इसे प्रबंधित करना असंभव है। एक समाधान के रूप में, आप सर्वर पर मेमोरी का आकार बढ़ा सकते हैं, लेकिन यह हमेशा संभव नहीं होता है।
मेमोरी खाली करने के लिए, आप सर्वर को पुनरारंभ कर सकते हैं, लेकिन कुछ समय बाद मेमोरी में मेटाफाइल का आकार अविश्वसनीय रूप से बढ़ने लगता है।
उदाहरण के लिए, आप रुसिनोविच के एक अन्य टूल - ntfsinfo का उपयोग करके MFT के आकार का अनुमान लगा सकते हैं। हमारे मामले में, 2 TB डिस्क पर MFT का आकार 13 GB है।

मेटाफाइल को जल्दी से कैसे साफ़ करें
RAMMap सर्वर को पुनरारंभ किए बिना MFT कचरे से उपयोग की गई मेमोरी को जल्दी से साफ़ करने की अनुमति देता है। ऐसा करने के लिए, मेनू में Empty -> Empty System Working Set चुनें।

उसके बाद, मेमोरी में मेटाफाइल का आकार दर्जनों गुना कम हो गया, और CPU द्वारा RAM उपयोग का प्रतिशत 95% से घटकर 26% हो गया।

इस विधि का मुख्य नुकसान यह है कि सफाई मैन्युअल है और इसे स्वचालित रूप से नहीं किया जा सकता।
फाइल कैश प्रबंधित करने के लिए डायनामिक कैश सर्विस
फाइल सिस्टम मेटाफाइल द्वारा उच्च मेमोरी लोड का एक और, अधिक कार्डिनल, समाधान डायनामिक कैश सर्विस (https://www.microsoft.com/en-us/download/details.aspx?id=9258) की स्थापना है। यह सेवा सिस्टम APIs का उपयोग करके डेडिकेटेड MFT कैश के पैरामीटर्स को प्रबंधित करने की अनुमति देती है।
महत्वपूर्ण. इस समाधान का उपयोग केवल तभी करें जब ऊपर वर्णित समस्या होती है। इस सेवा की स्थापना आपके सर्वर्स पर उच्च मेमोरी उपयोग के अन्य कारणों के लिए एक सार्वभौमिक समाधान नहीं होगी।DynCache को स्थापित करना काफी आसान है (आर्काइव में विस्तृत निर्देश हैं)।
- DynCache.exe फ़ाइल को %SystemRoot%\System32 फ़ोल्डर में कॉपी करें
- इस कमांड का उपयोग करके DynCache सेवा बनाएं:
sc create DynCache binpath= %SystemRoot%\System32\DynCache.exe start= auto type= own DisplayName= "Dynamic Cache Service"
- DynCache.reg को रजिस्ट्री में इम्पोर्ट करें (इसमें डिफ़ॉल्ट मान हैं)
- निम्न रजिस्ट्री कुंजियों के मान बदलें: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DynCache\Parameters
- MaxSystemCacheMBytes: 4096 (dec) - अधिकतम कैश आकार (MB)
- MinSystemCacheMBytes: 100 (dec) - न्यूनतम कैश आकार (MB)

नोट. इन और अन्य DynCache सर्विस सेटिंग्स को RAM आकार, सर्वर लोड, आवश्यक प्रदर्शन आदि के अनुसार संपादित करना होगा। एक नियम के रूप में, सर्वर पर स्थापित फिजिकल RAM के आधे से अधिक कैश आकार सेट करने की अनुशंसा नहीं की जाती है। परिवर्तन करने के बाद, आपको DynCache को पुनरारंभ करने की आवश्यकता नहीं है, क्योंकि सभी परिवर्तन डायनामिक रूप से लागू होते हैं।
- इस कमांड का उपयोग करके सेवा चलाएँ:
sc start DynCache
हमारे मामले में, DynCache सर्विस स्थापित होने के बाद, मेटाफाइल द्वारा मेमोरी उपयोग 4 GB से अधिक नहीं हुआ जिसे हमने सेट किया था। उपयोगकर्ताओं ने फाइल सर्वर पर किसी भी प्रदर्शन समस्या की सूचना नहीं दी।