सीपीयू की इष्टतम संख्या गेंडा प्रक्रियाओं


16

हम यूनिकॉर्न के तहत रेल वेब ऐप पर रूबी चला रहे हैं। हमारा ऐप सख्ती से सीपीयू बाउंड नहीं है (हमारे पास एक डुअल एक्सोन E5645 सिस्टम w / 12 कोर है और एक पीक लोड एवरेज वैल्यू लगभग 6 है)। हमने शुरुआत में 40 यूनिकॉर्न श्रमिकों के साथ शुरुआत की लेकिन समय के साथ एप्लीकेशन मेमोरी फुटप्रिंट में वृद्धि हुई। इसलिए, अब हमें कार्यकर्ता प्रक्रियाओं की संख्या कम करनी होगी। मैंने सोचा था कि मानक (CPU कोर + 1 की संख्या) सूत्र यूनिकॉर्न पर भी लागू होता है, लेकिन मेरे सहयोगी ने मुझे समझाने की कोशिश की कि हमें प्रति सीपीयू में अधिक यूनिकॉर्न इंस्टेंस को आरक्षित करना चाहिए और यह लिंक प्रदान करना चाहिए । फिर भी, मुझे बिल्कुल यकीन नहीं है कि हमें बेकार यूनिकॉर्न प्रक्रियाओं पर इतनी स्मृति खर्च करने की आवश्यकता क्यों है।

मेरा सवाल है: सीपीयू कोर प्रति एक से अधिक यूनिकॉर्न उदाहरण होने का कारण क्या है? क्या यह यूनिकॉर्न की कुछ वास्तुशिल्प विशिष्टता के कारण है? मुझे पता है कि व्यस्त गेंडा प्रक्रियाएं नए कनेक्शन को स्वीकार नहीं कर सकती हैं (हम यूनिकॉर्न इंस्टेंस बीटीडब्ल्यू से संवाद करने के लिए यूनिक्स डोमेन सॉकेट्स का उपयोग कर रहे हैं) लेकिन मैंने सोचा कि बैकलॉग को इसे संबोधित करने के लिए बिल्कुल पेश किया गया था। क्या यह संभव है कि 2 से 8 यूनिकॉर्न इंस्टेंसेस प्रति सीपीयू नियम से किसी भी तरह दूर हों?

जवाबों:


17

ठीक है, मुझे जवाब मिल गया है। यूनिकॉर्न श्रमिकों की इष्टतम संख्या सीपीयू कोर की संख्या से सीधे जुड़ी नहीं है, यह आपके लोड और आंतरिक ऐप संरचना / जवाबदेही पर निर्भर करता है। मूल रूप से हम श्रमिकों के राज्य का निर्धारण करने के लिए नमूना प्रोफाइलर का उपयोग करते हैं, हम श्रमिकों को 70% निष्क्रिय रखने की कोशिश करते हैं और 30% वास्तविक काम करते हैं। इसलिए, 70% नमूनों को "फ्रंटएंड सर्वर से अनुरोध प्राप्त करने के लिए चयन () कॉल पर प्रतीक्षा करना चाहिए"। हमारे शोध से पता चला है कि श्रमिकों के केवल 3 प्रभावी राज्य हैं: 0-30% नमूने निष्क्रिय हैं, 30-50% नमूने निष्क्रिय हैं और 50-70% नमूने निष्क्रिय हैं (हाँ, हम अधिक निष्क्रिय नमूने प्राप्त कर सकते हैं लेकिन वहाँ इसमें कोई वास्तविक बिंदु नहीं है क्योंकि अनुप्रयोग प्रतिक्रियाशीलता में महत्वपूर्ण परिवर्तन नहीं होता है)। हम 0-30% स्थिति को "रेड ज़ोन" और 30-50% की स्थिति को "येलो ज़ोन" मानते हैं।


1
क्या आप बता सकते हैं कि आप इन श्रमिकों के राज्य का नमूना कैसे ले रहे हैं?
डीपीएस

6

आप सीपीयू-बाउंड नौकरियों के लिए एन + 1 के बारे में सही हैं।

दूसरी ओर, गेंडा धागे का उपयोग नहीं करता है, इसलिए प्रत्येक आईओ ऑप। इस प्रक्रिया को अवरुद्ध करता है और HTTP हेडर को घुमा और पार्स कर सकता है, स्ट्रिंग्स को समेटना और प्रत्येक सीपीयू-गहन कार्यों को करना जो उपयोगकर्ता की सेवा करने की आवश्यकता है (अनुरोध विलंबता को कम करने के लिए पहले यह कर रहा है)।

और आप अधिक धागे / प्रक्रियाएँ चाहते हैं तो कोर कर सकते हैं। निम्नलिखित स्थिति की कल्पना करें: req। A दस गुना अधिक लेता है फिर req। बी, आपके पास कई समवर्ती ए अनुरोध हैं और तेजी से बी अनुरोध केवल ए-रीक पूरा होने की प्रतीक्षा में संलग्न है। इसलिए यदि आप भारी अनुरोधों की संख्या का अनुमान लगा सकते हैं, तो आप सिस्टम को ट्यून करने के लिए एक अन्य दिशानिर्देश के रूप में इस संख्या का उपयोग कर सकते हैं।


1
अच्छा बिंदु, मान लें कि अनुरोध अधिक या कम समान रूप से वितरित किए गए हैं और बहुत हल्के हैं (हमारे पास वास्तव में भारी अनुरोध हैं लेकिन वे यूनिकॉर्न्स के दूसरे पूल द्वारा नियंत्रित किए जाते हैं)। यदि सभी अनुरोध अचानक भारी हो जाते हैं (जैसे कि DB नोड पर I / O भुखमरी के मामले में) तो हम प्रति सीपीयू इंस्टेंसेस संख्या की परवाह किए बिना नीचे होंगे। खैर, सच को जानने का सबसे अच्छा तरीका है किसी तरह का लोड परीक्षण करना।
एलेक्स

हां, परीक्षण आपको बताएगा। या, यदि आप पहले ही शुरू कर चुके हैं, तो आप लॉग को प्राप्त कर सकते हैं और समवर्ती अनुरोधों की अधिकतम संख्या देख सकते हैं। मुझे पूरा यकीन है, कि आप अनुरोध समय और बैकएंड प्रतिक्रिया समय दोनों को लॉग इन करते हैं। यदि आप नहीं करते हैं, तो Nginx आपका दोस्त होगा। :)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.