अक्सर, हमारे ऑन-साइट, डेबियन-स्थिर आधारित एप्लिकेशन की स्थापना वर्चुअल मशीन में चलती है - आमतौर पर वीएमवेयर ईएसएक्सआई में। सामान्य स्थिति में हमारे पास उनके वर्चुअलाइजेशन वातावरण में दृश्यता या प्रभाव नहीं होता है और उदाहरण के लिए VMware vCenter क्लाइंट या समकक्ष तक पहुंच नहीं है। मैं यहां VMware पर ध्यान केंद्रित करता हूं, क्योंकि अब तक हम सबसे आम हैं।
हम चाहेंगे:
- किसी ग्राहक के VMware व्यवस्थापक को बताएं: आप हमारे एप्लिकेशन को अपने VMware ESX वातावरण में चला सकते हैं, जब तक कि यह प्रदर्शन मानदंड X, Y और Z से मिलता है।
- यह निर्धारित करने में सक्षम हो कि क्या मानदंड एक्स, वाई और जेड वास्तव में लगातार मिलते हैं (जैसे कि अभी भी ), यहां तक कि एक रनिंग सिस्टम पर भी (हम अपने एप्लिकेशन को रोक नहीं सकते हैं और बेंचमार्क नहीं चला सकते हैं, और एक प्रारंभिक बेंचमार्क पर्याप्त नहीं होगा, क्योंकि प्रदर्शन में आभासी वातावरण समय के साथ बदलते हैं)।
- विश्वास रखें कि यदि मानदंड X, Y और Z मिलते हैं, तो हमारे पास संतोषजनक प्रदर्शन के साथ हमारे आवेदन को चलाने के लिए पर्याप्त आभासी HW संसाधन होंगे।
अब X, Y और Z क्या हैं?
हमने समय और फिर से देखा है, कि जब प्रदर्शन समस्याएं हैं, तो समस्या हमारे आवेदन के साथ नहीं है, लेकिन वर्चुअलाइजेशन वातावरण के साथ है। उदाहरण के लिए, एक अन्य वर्चुअल मशीन CPU, मेमोरी या SAN का उपयोग करती है, जिस पर डिस्क वास्तव में संग्रहित होती है, हमारे एप्लिकेशन के अलावा किसी अन्य चीज द्वारा भारी उपयोग प्राप्त करती है। वर्तमान में हमारे पास ऐसा कोई तरीका नहीं है जो साबित या अस्वीकृत हो।
सैद्धांतिक रूप से यह भी संभव हो सकता है कि कभी-कभी हमारा अनुप्रयोग धीमा होता है ... ;-)
वर्चुअल प्रदर्शन या हमारे अनुप्रयोग: कोई हमारे प्रदर्शन समस्याओं का मूल कारण कैसे निर्धारित करता है?
प्रदर्शन समस्याओं के लिए आमतौर पर 3 क्षेत्र हैं सीपीयू, मेमोरी और डिस्क आई / ओ।
सी पी यू
उदाहरण के लिए, वीएमवेयर में प्रशासक मेगाहर्ट्ज में व्यक्त किए गए आरक्षण और सीमा को निर्दिष्ट कर सकता है, लेकिन उदाहरण के लिए 512 मेगाहर्ट्ज एक ईएसएक्स होस्ट पर ठीक वैसा ही है जैसा किसी अन्य ईएसएक्स होस्ट पर 512 मेगाहर्ट्ज, संभवतः पूरी तरह से अलग ईएसएक्स क्लस्टर में?
और कैसे एक उपाय है कि क्या हम वास्तव में मिलता है? जब हमारा आवेदन चल रहा है, हम शायद देख सकते हैं कि हम 4 सीपीयू पर 212% सीपीयू उपयोग कर रहे हैं। क्या इसलिए कि हमारा एप्लिकेशन बहुत कुछ कर रहा है या क्योंकि एक ही होस्ट पर एक अन्य वीएम एक सीपीयू गहन कार्य चला रहा है और सभी सीपीयू का उपयोग कर रहा है?
मेमोरी (बैलूनिंग)
अगर हम उदाहरण के लिए 16GB RAM की मांग करते हैं, जो अक्सर कॉन्फ़िगर की जाती है, लेकिन गुब्बारे के कारण , हम वास्तव में केवल 4GB प्राप्त करते हैं, और आश्चर्य की बात है, हमारा आवेदन खराब प्रदर्शन करता है।
वीएमवेयर उपकरण को वर्तमान गुब्बारे के बारे में पूछ सकते हैं, लेकिन हमने पाया है कि यह अक्सर झूठ होता है (या कम से कम गलत है)। हमने ऐसे उदाहरण देखे हैं जहां OS को लगता है कि कुल 16GB RAM है, सभी प्रक्रियाओं की निवासी मेमोरी (RSS) का योग 4GB RAM है, लेकिन केवल 2GB RAM मुफ्त है, तब भी जब VMware उपकरण हमें बताते हैं कि 0 गुब्बारा है: - (
इसके अलावा, RSS को एक साथ जोड़ना मान्य नहीं है, क्योंकि आसानी से RAM साझा की जा सकती है, उदाहरण के लिए कॉपी-ऑन-राइट मेमोरी इसलिए 512MB + 512MB का मतलब 1GB नहीं है, लेकिन इसका मतलब कुछ कम हो सकता है। तो एक व्यक्ति को रैम को मुक्त करने के लिए सभी प्रक्रियाओं से बस आरएसएस को घटाया नहीं जा सकता है और कितना रैम मुक्त होना चाहिए और इसके लिए विश्वसनीय तरीके से गुब्बारे का पता लगाना चाहिए। एक गुब्बारे के कुछ मामलों का पता लगा सकता है, लेकिन ऐसे अन्य मामले हैं जहां गुब्बारा प्रभाव में है, लेकिन इस विधि द्वारा पता लगाने योग्य नहीं है।
डिस्क I / O
मुझे लगता है कि हम समय के साथ डिस्क पढ़ सकते हैं और लिख सकते हैं, बाइट्स की संख्या पढ़ी और लिखी गई है, और आईओ प्रतीक्षा%। लेकिन क्या यह हमें डिस्क I / O की सटीक तस्वीर देगा? मुझे लगता है कि अगर एक बिटकॉइन माइनर किसी अन्य वीएम में सभी सीपीयू का उपयोग करके चल रहा है, तो हमारा आईओ प्रतीक्षा% ऊपर जाएगा, भले ही अंतर्निहित सैन बिल्कुल समान प्रदर्शन देता है, बस इसलिए कि हमारे सीपीयू संसाधन नीचे जाते हैं, और इसलिए आईओ प्रतीक्षा करते हैं ( जो% म मापा जाता है ) ऊपर जाता है।
इसलिए सारांश में, हम एक VMware व्यवस्थापक का वर्णन करने के लिए किस भाषा का उपयोग कर सकते हैं, पोर्टेबल और औसत दर्जे के तरीके से हमें किस प्रदर्शन की आवश्यकता है?
"It runs fine with x, y, and z"
पर्याप्त सटीक नहीं है। आपको अपने ग्राहकों को ठीक-ठीक बताने में सक्षम होना चाहिए कि आपके आवेदन की क्या आवश्यकता है। यदि वे आपको वे संसाधन देते हैं और एप्लिकेशन खराब प्रदर्शन करता है तो सवाल यह नहीं है "What do we need from a resource perspective?"
, लेकिन"Why is it performing poorly even though the proper resources have been allocated?"