जब आप वर्चुअलाइजेशन होस्ट्स (VMWare ESXi या Hyper-V) पर चलने वाले VMs को प्रशासित करते हैं और प्रदर्शन समस्याओं का विश्लेषण करते हैं, तो आप अक्सर ऐसी परिस्थितियों का सामना करते हैं जब अतिथि OS में उपलब्ध मेमोरी का आकार ऑपरेशन सिस्टम द्वारा देखे जाने वाले मेमोरी से बहुत कम होता है (या इसे असाइन किया जाता है) यह)। उदाहरण के लिए, वर्चुअल मशीन को 8 जीबी मेमोरी आवंटित की जाती है, टास्क मैनेजर दिखाता है कि 1 जीबी मुफ्त है, हालांकि सभी चल रही प्रक्रियाएं 3 जीबी से कम की खपत करती हैं। बाकी 4 जीबी कहां हैं?
एक नियम के रूप में, यह व्यवहार हाइपरविजर में स्मृति overcommit सुविधा का उपयोग करने के कारण होता है।
मेमोरी ओवरकमिट एक हाइपरविजर सुविधा है जो आपको वर्चुअल मशीन को भौतिक होस्ट पर उपलब्ध मेमोरी से अधिक मेमोरी आवंटित करने की अनुमति देती है, लेकिन बिना किसी गारंटी के कि सभी अनुरोधित मेमोरी को एक विशेष क्षण में आवंटित किया जा सकता है। मेमोरी ओवरकमिट वर्तमान होस्ट लोड (निष्क्रिय VMs के संसाधनों को अधिक लोड किए गए लोगों के बीच पुनर्वितरित किया जा सकता है) के आधार पर VMs के बीच गतिशील मेमोरी वितरण के कारण वर्चुअल मशीन को अधिक सघन रूप से आवंटित करने की अनुमति देता है।
VMWare में मेमोरी ओवरकमिट को लागू करने के लिए तंत्र में से एक है मेमोरी बैलूनिंग . Hyper-V में, वही सुविधा डायनामिक मेमोरी . द्वारा कार्यान्वित की जाती है ।
नोट . वैसे, VMWare और Microsoft दोनों मेमोरी संसाधनों को बचाने के लिए व्यापक रूप से और प्रभावी रूप से मेमोरी कंप्रेशन का उपयोग करते हैं (यह भी मेमोरी ओवरकमिट तकनीक के कार्यान्वयन में से एक है)।VMWare में ESXi मेमोरी ओवरकमिटमेंट (वर्चुअल मेमोरी बैलूनिंग) vmmemctl.sys द्वारा कार्यान्वित किया जाता है ड्राइवर (वीएमवेयर टूल्स में शामिल), जो जरूरत पड़ने पर इसमें एक नकली प्रक्रिया (जैसे गुब्बारा फुलाकर) बनाकर भौतिक मेमोरी को कैप्चर कर सकता है। इस प्रकार, अतिथि ओएस में अन्य अनुप्रयोगों के लिए कब्जा की गई मेमोरी अनुपलब्ध हो जाती है, और हाइपरवाइजर अन्य वीएम के बीच मुफ्त मेमोरी वितरित कर सकता है। हाइपर-V डायनामिक मेमोरी में, एक dmvsc.sys एकीकरण सेवाओं से ड्राइवर (डायनामिक मेमोरी वीएससी घटक) का उपयोग किया जाता है। मेमोरी overcommitment सेटिंग्स को हाइपरवाइजर व्यवस्थापक द्वारा प्रबंधित किया जाता है।
आप अतिथि VM के भीतर से कैसे पता लगा सकते हैं कि उसके पास वास्तव में कम भौतिक स्मृति उपलब्ध है जो अतिथि ऑपरेटिंग सिस्टम देखता है?
आइए विचार करें कि कैसे पता लगाया जाए कि अतिथि विंडोज ओएस में एक गुब्बारा चालक है और इसका आकार क्या है। तो, आइए इस उदाहरण का विश्लेषण करें।
VM रनिंग गेस्ट Windows Server 2012 R2 को 8 GB मेमोरी आवंटित की जाती है। टास्क मैनेजर दिखाता है कि 93% मेमोरी का उपयोग किया जाता है (7.4 जीबी मेमोरी पर कब्जा है)। हालाँकि, यदि आप सभी चल रही प्रक्रियाओं द्वारा उपयोग की जाने वाली मेमोरी की मात्रा को जोड़ते हैं, तो आप एक अप्रत्याशित निष्कर्ष पर आ सकते हैं कि वास्तव में केवल 2.5 जीबी मेमोरी का उपयोग किया जाता है। बाकी 5 जीबी कहां हैं? न तो कार्य प्रबंधक और न ही संसाधन मॉनिटर इस प्रश्न का उत्तर देने में सक्षम हैं।
यह समझने के लिए कि मेमोरी के साथ क्या हो रहा है, आपको RamMap . का उपयोग करने की आवश्यकता है मार्क रसिनोविच द्वारा टूल (पहले के मामलों में से एक में, मैंने दिखाया है कि विंडोज सर्वर पर मेटाफाइल द्वारा उच्च मेमोरी उपयोग के साथ किसी समस्या का निदान करने के लिए इस टूल का उपयोग कैसे करें)। Microsoft वेबसाइट (https://technet.microsoft.com/en-us/library/ff700229.aspx) से टूल डाउनलोड करें और इसे व्यवस्थापकीय विशेषाधिकारों के साथ चलाएं। उसके बाद गिनती का उपयोग करें . पर टैब आप देख सकते हैं कि अधिकांश मेमोरी (5.4 जीबी) का उपयोग ड्राइवर लॉक्ड . द्वारा किया जाता है वस्तु।
यह वह मेमोरी है जिसे हाइपरवाइजर ने गेस्ट ओएस में बैलून ड्राइवर का उपयोग करके अन्य वर्चुअल मशीनों के बीच कब्जा और वितरित किया है। इसका मतलब है कि हाइपरवाइजर होस्ट के पास पर्याप्त मेमोरी नहीं है या हाइपरवाइजर एडमिनिस्ट्रेटर इस VM के लिए मेमोरी लिमिट पॉलिसी का उपयोग करता है।
हाइपर-V में वर्तमान VM मेमोरी आँकड़े प्रदर्शन मॉनिटर में अलग-अलग प्रदर्शन काउंटरों द्वारा दिखाए जा सकते हैं:
- हाइपर-V डायनामिक मेमोरी -> गेस्ट विज़िबल मेमोरी
- हाइपर-V डायनामिक मेमोरी -> भौतिक मेमोरी
इस व्यवहार को अक्षम करने के लिए, हाइपरविजर व्यवस्थापक को डायनामिक मेमोरी सक्षम करें . को अक्षम करना होगा VM की हाइपर- V सेटिंग्स में विकल्प (या न्यूनतम आरक्षण मान बढ़ाएँ)।
यदि VMWare ESXi होस्ट का उपयोग किया जाता है, तो आप संसाधन सेटिंग्स में इस वर्चुअल मशीन के लिए अधिक मेमोरी आरक्षित कर सकते हैं। या सभी मेमोरी आरक्षित करें - सभी अतिथि मेमोरी आरक्षित करें (सभी लॉक)।