आप कैसे अनुमान लगा सकते हैं कि कितनी मेमोरी खरीदना है?


10

मेरे पास एक कस्टम सर्वर एप्लिकेशन है जो विंडोज 2008 आर 2 पर चलता है। यह एक कस्टमाइज़्ड विंडोज सर्विस है, जो कि .Net में लिखी गई है, जो कई कस्टम टर्मिनलों का समर्थन करती है। मेरे पास एक परीक्षण मशीन है जिसमें लाइव सर्वर के समान विनिर्देश हैं और मेरे पास क्लाइंट सिमुलेटर का एक सेट है जो मैं लोड का उत्पादन करने के लिए उपयोग कर सकता हूं जो वास्तविक प्रणाली का एक उचित अनुमान है। मुझे इनमें से 12,000 का समर्थन करने में सक्षम होना चाहिए और वर्तमान में सर्वर मेमोरी से बाहर चल रहा है (पेजिंग छत से गुजर रहा है)।

मेरी योजना केवल 100 सिमुलेटर शुरू करने, स्मृति उपयोग को मापने की थी, फिर 100 और माप मेमोरी को फिर से शुरू करें और तब तक दोहराएं जब तक पेजिंग शुरू न हो जाए (वास्तव में मैं तीन से अधिक डेटा बिंदु ले रहा हूं।) यह मुझे एक आंकड़ा देना चाहिए। 100 सिमुलेटरों के लिए आवश्यक अतिरिक्त मेमोरी की मात्रा और मुझे यह प्रोजेक्ट करने में सक्षम करें कि कितनी मेमोरी की आवश्यकता है। मुझे केवल एक मोटे विचार +/- 30Gb की आवश्यकता है जो कि सर्वर ले जाएगा पूर्ण 2Tb ($ 150,000 मूल्य) खरीदने से बचने के लिए। मेरा सवाल यह है कि क्या यह उपयोग करने के लिए एक उचित तरीका है और यदि ऐसा है तो कौन सा प्रदर्शन काउंटरर्स वास्तव में उपयोग की जा रही मेमोरी की मात्रा देने के लिए निगरानी करेगा?

मैं विशेष रूप से यहां मेमोरी के बारे में बात कर रहा हूं क्योंकि वर्किंग सेट, प्राइवेट बाइट्स, कमिटेड, शेयर्ड, वर्चुअल और अन्य सभी मेमोरी टर्म्स के बीच का अंतर मुझे भ्रमित करता है। मुझे लगता है कि मैं स्वयं सीपीयू, आईओ और नेटवर्किंग की निगरानी कर सकता हूं। दूसरी बात जिस पर मैंने गौर किया है कि .Net कैश अपनी मेमोरी के उपयोग को इस बात पर निर्भर करता है कि क्या उपलब्ध है जो देखने के लिए कठिन प्रवृत्ति को दर्शाता है।


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

आपको थोड़ा सा बेहतर विचार देने की जरूरत है कि यह क्या है। क्या यह वेब है? aspx? php? कुछ होमग्रोन? बैच की नौकरी? Asp.net का व्यवहार एक बॉक्स पर चल रहे exes के भार से अलग है। आपको प्रति उपयोगकर्ता कुछ बुनियादी विचार की आवश्यकता है जो सिस्टम प्रति उपयोगकर्ता का उपयोग करता है - लगभग। आंकड़े - और फिर एक पुराना लिफाफा। आप उन आंकड़ों को कैसे प्राप्त करते हैं यह इस बात पर निर्भर करता है कि आपका सिस्टम कैसे काम करता है।
इयान मर्फी

@Evan। मैं हमेशा दो से अधिक डेटा पॉइंट लेने वाला था।
मार्टिन ब्राउन

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

जवाबों:


8

ईमानदारी से? मैंने नहीं किया
जब एक सर्वर को निर्दिष्ट करना जो किसी भी प्रकार के वास्तविक कार्यभार को देखेगा, तो मैं जितना संभव हो उतना रैम में cram कर सकता हूं (सिस्टम सीपीयू या डिस्क की तुलना में रैम-विवश होने की संभावना अधिक है) बस)।

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

यदि आप किसी न किसी संख्या को प्राप्त करने के लिए लोड टेस्ट करते हैं और वहां से कुछ चीजों में फैक्टर को याद करते हैं:

  1. मेमोरी वक्र संभवतः दो अलग-अलग खंड होंगे
    (शुरुआती तेज रैंप जैसा कि फ्रेमवर्क / शेयर्ड लाइब्रेरी कैश्ड हैं, फिर प्रत्येक नए ऐप के un-shareable कोड को मेमोरी में डाल दिया जाता है)

  2. आपको अभी भी डिस्क और साझा लाइब्रेरी कैशिंग और ओएस के लिए मुफ्त रैम की आवश्यकता है।
    (यह कम से कम कुछ गिग्स होना चाहिए जो आपके ऐप की आवश्यकता है)

  3. सभी सॉफ़्टवेयर मेमोरी लीक करते हैं (कम से कम सभी व्यावहारिक सॉफ़्टवेयर करते हैं), इसलिए अपने परीक्षण में उस के लिए देखें और सुनिश्चित करें कि आपके पास लीक से निपटने के लिए कमरा है।

  4. आपका लोड संभवतः सर्वर के जीवनकाल में बढ़ जाएगा। तदनुसार योजना बनाएं।
    (यदि आपके पास अच्छी क्षमता नियोजन संख्या नहीं है, तो आज के कार्यभार को दोगुना करें और उसे संभालने की योजना बनाएं)।

  5. आज बहुत अधिक रैम खरीदना आपके पर्यावरण को कल के मुकाबले गिरने से सस्ता है।

    • पहला कोरोलरी: यदि आप जरूरत से थोड़ा बड़ा सर्वर खरीदते हैं, तो आप प्रेजेंटर एडमिन हैं, जिसने कंपनी को चालू रखा है। आपको काफी हद तक नजरअंदाज कर दिया जाएगा।
    • दूसरी कोरोलरी: यदि आप मशीन को आकार देते हैं और ऐसी समस्याएं हैं जो आप अक्षम भैंस हैं जो 500% वृद्धि का अनुमान नहीं लगा सकती हैं, और हर कोई आपसे नफरत करता है।

मैं कोरोलरीज का अनुमोदन करता हूं।
mfinni


उसके लिए धन्यवाद। हालांकि हमारे पास यह प्रणाली लाइव है, यह वर्तमान में एक बहुत छोटे परीक्षण का समर्थन कर रहा है जिसका अर्थ है कि मैं इसे बंद नहीं कर सकता।
मार्टिन ब्राउन

0

धन्यवाद, अपडेट कम से कम सभी को एक सुराग देता है। आप 2Tb स्मृति पर विचार कर रहे हैं इसका मतलब है कि आप एक अलग बॉलपार्क में सामान्य सेटअप में खेल रहे हैं। बड़ी व्यवस्था है। यह सोचकर नफरत होती है कि कितनी ऊष्मा पैदा होगी।

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

मैं किसी भी सामान्य उपकरण के बारे में नहीं जानता, जिसे आप व्हाट्सएप पर आने वाले व्हाट्सएप के एक बुनियादी अवलोकन की तुलना में बहुत अधिक दे सकते हैं। सेवा प्रक्रिया स्वयं एक ब्लैक बॉक्स है और आपकी देव टीम को निगरानी उपकरण प्रदान करने की आवश्यकता है।

लिफाफा गणना की त्वरित पीठ:

2Tb of memory = 1024Gb = 1024*1024Mb = 1048576Mb
1048576Mb / 13000 connections = around 80mb per session

यह एक सामान्य .net exe के काम करने के सेट की सीमा से बाहर नहीं होगा।

क्या सेवा के कई सूत्र हैं? यदि वे प्रत्येक कनेक्शन के लिए एक थ्रेड लॉन्च कर रहे हैं तो यह देखने लायक होगा कि वे यह कैसे कर रहे हैं। Microsoft से ProcExp.exe यह देखने का एक आसान तरीका है कि क्या आपके पास कई धागे हैं और वे धागे क्या खा रहे हैं। यह .net के बारे में नहीं जानता है लेकिन आपको win32 काउंटर देगा।

क्या आप इंगित कर सकते हैं कि पेजिंग शुरू करने से पहले आपने अपना परीक्षण करते समय कितनी मेमोरी और कितने कनेक्शन लिए थे?

तो, कैसे स्थापित करें यदि सर्वर प्रक्रिया में मेमोरी लीक की समस्या है? यह प्रत्येक सत्र के साथ अधिक मेमोरी संचित हो सकता है, या यह मेमोरी संचय हो सकता है और उन्हें कभी भी मुक्त नहीं कर सकता है।

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

यह देखने के लिए विचार किया जा रहा है कि क्या सेवा प्रत्येक सत्र के साथ अधिक से अधिक मेमोरी का उपभोग कर रही है, या यदि खुले सत्र कभी मेमोरी उपयोग को बढ़ाते हैं।

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