2012-06-25 19 views
6

अनुकूलित करने के तरीके मैं रेलवे 3.1.3 ऐप पर रूबी के लिए अपने यूनिकॉर्न सेटअप को अनुकूलित करने के तरीकों में रूचि रखता हूं। मैं वर्तमान में हाई-सीपीयू अतिरिक्त बड़े इंस्टेंस पर 14 कार्यकर्ता प्रक्रियाओं को जन्म दे रहा हूं क्योंकि मेरा एप्लिकेशन लोड परीक्षण के दौरान सीपीयू बाध्य प्रतीत होता है। सिमुलेशन लोड परीक्षणों पर प्रति सेकंड रीप्लेइंग अनुरोधों के बारे में 20 अनुरोधों पर, मेरे उदाहरण पर सभी 8 कोर बाहर निकलते हैं, और बॉक्स लोड 7-8 तक स्पाइक्स लोड हो जाता है। प्रत्येक यूनिकॉर्न उदाहरण 56-60% सीपीयू का उपयोग कर रहा है।लोड परीक्षणों के दौरान यूनिकॉर्न सीपीयू उपयोग स्पाइकिंग,

मुझे उत्सुकता है कि मैं इसे कैसे अनुकूलित कर सकता हूं? मैं इस आकार के उदाहरण पर प्रति सेकंड अधिक अनुरोधों को फ़नल करने में सक्षम होना चाहता हूं। मेमोरी पूरी तरह ठीक है जैसा कि अन्य सभी I/O है। मेरे परीक्षण के दौरान सीपीयू टैंक हो रहा है।

+0

क्या आप रूबी 1.9 का उपयोग करते हैं? यदि नहीं, तो यह मदद कर सकता है। – Reactormonk

+0

मैं रूबी का उपयोग कर रहा हूं 1.9.3 – randombits

+4

प्रोफ़ाइल अपना कोड (रूबी-प्रोफेसर) यह पता लगाएं कि यह धीमा क्यों है, बाधा को फिर से लिखने का प्रयास करें। पर्याप्त तेज़ तक दोहराएं। 0 जानकारी के साथ हम अनुमान नहीं लगा सकते हैं कि आपका कोड तेज़ क्यों नहीं है –

उत्तर

1

सबसे पहले, आप शायद 45-60% सीपीयू पर उदाहरण नहीं चाहते हैं। उस स्थिति में, यदि आपको यातायात की गति मिलती है, तो आपके सभी उदाहरण चकित होंगे।

अगला, 14 यूनिकॉर्न उदाहरण बड़े लगते हैं। यूनिकॉर्न थ्रेडिंग का उपयोग नहीं करता है। इसके बजाय, प्रत्येक प्रक्रिया एक धागे के साथ चलती है। यूनिकॉर्न की मास्टर प्रक्रिया केवल select एक थ्रेड होगी यदि यह इसे संभालने में सक्षम है। इस वजह से, कोर की संख्या एक मीट्रिक नहीं है जिसका उपयोग आपको यूनिकॉर्न के साथ प्रदर्शन को मापने के लिए करना चाहिए।

एक अधिक रूढ़िवादी सेटअप प्रति उदाहरण 5-8 अनुरोधों का जवाब देकर प्रति उदाहरण 4 या तो यूनिकॉर्न प्रक्रियाओं का उपयोग कर सकता है। फिर, उदाहरणों की संख्या समायोजित करें जब तक कि आपका CPU उपयोग लगभग 35% न हो। यह प्रति सेकंड परिदृश्य के तनावपूर्ण '20 अनुरोधों के तहत स्थिरता सुनिश्चित करेगा। '

आखिरकार, आप God का उपयोग कर अधिक किरकिरा आंकड़े और विवरण प्राप्त कर सकते हैं।

+2

1) ओपी ने कहा कि यह लोड परीक्षण के दौरान है, इसलिए यह * एक ट्रैफिक स्पाइक है। 2) थ्रेडेड प्रक्रियाओं को कोर की संख्या के साथ क्या करना है? –

6

यदि आप सीपीयू बाध्य हैं तो आप कोर की तुलना में अधिक यूनिकॉर्न प्रक्रियाओं का उपयोग नहीं करना चाहते हैं, अन्यथा आप सिस्टम को अधिभारित करते हैं और शेड्यूलर को धीमा करते हैं। आप एबी का उपयोग कर एक देव बॉक्स पर इसका परीक्षण कर सकते हैं। आप देखेंगे कि 2 यूनिकॉर्न्स 20 से अधिक प्रदर्शन करेंगे (संख्या कोर पर निर्भर करती है, लेकिन अवधारणा सच रहेगी)।

इस नियम का अपवाद यह है कि यदि आपका आईओ बाध्य है। स्मृति में पकड़ने के रूप में कई मामले में कई यूनिकॉर्न जोड़ें।

एक अच्छा प्रदर्शन चाल आईओ बाध्य अनुरोधों को कई यूनिकॉर्ड्स होस्ट करने वाले एक अलग ऐप सर्वर पर रूट करने के लिए है। उदाहरण के लिए, यदि आपके पास कोई अनुरोध है जो एक धीमी एसक्यूएल क्वेरी का उपयोग करता है, या बाहरी अनुरोध पर आपका इंतजार, जैसे कि क्रेडिट कार्ड लेनदेन। यदि nginx का उपयोग करते हैं, IO बाध्य अनुरोधों के लिए अपस्ट्रीम सर्वर को परिभाषित करें, उन यूआरएल को 40 यूनिकॉर्न वाले बॉक्स में अग्रेषित करें। सीपीयू बाध्य या वास्तव में तेज़ अनुरोध, 8 यूनिकॉर्न के साथ एक बॉक्स में अग्रेषित करें (आपने कहा है कि आपके पास 8 कोर हैं, लेकिन शायद आप 4-6 कोशिश कर सकते हैं क्योंकि उनके शेड्यूलर हाइपरवाइज्ड हैं और पहले से ही व्यस्त हैं)।

इसके अलावा, मुझे यकीन नहीं है कि आप विश्वसनीय CPU उपयोग देने वाले aws पर भरोसा कर सकते हैं, क्योंकि आपको अस्पष्ट प्रतिशत का प्रतिशत मिल रहा है।

1

एक उच्च CPU अतिरिक्त बड़े उदाहरण के लिए प्रति सेकंड 20 अनुरोध बहुत कम है। यह संभावना है कि कोड के साथ कोई समस्या है। एक यूनिकॉर्न-विशिष्ट समस्या कम संभावना प्रतीत होती है। यदि आप संदेह में हैं, तो आप एक अलग ऐप सर्वर आज़मा सकते हैं और पुष्टि कर सकते हैं कि यह अभी भी होता है।

इस परिदृश्य में, सवाल मैं के बारे में सोच होगी ...

1 - हो सकता है कुछ है कि वास्तव में डेटाबेस में होना चाहिए - आप कुछ सीपीयू कोड में गहन कर रहे हैं। उदाहरण के लिए, यदि आप इसे एक बड़े रिकॉर्डसेट वापस ला रहे हैं और इसके माध्यम से रूबी/रेल में इसे लूपिंग कर रहे हैं या कुछ अन्य ऑपरेशन करते हैं, तो यह डेटाबेस के विपरीत के रूप में इस स्तर पर एक सीपीयू बाधा को समझाएगा। इस मामले में सिफारिश अधिक करने के लिए क्वेरी को संशोधित करना और रेलों के बोझ को दूर करना है।उदाहरण के लिए, यदि आप एसक्यूएल के बजाए अपने कंट्रोलर में परिणाम सेट को सॉर्ट कर रहे हैं, तो इससे इस तरह की समस्या होगी।

2 - क्या आप एक वेनिला क्रूड ऐप की तुलना में असामान्य कुछ कर रहे हैं, जैसे साझा संसाधन तक पहुंचना, या कुछ भी जहां विवाद एक मुद्दा हो सकता है?

3 - क्या आपके पास कोई लूप है जो सीपीयू को जला सकता है, खासकर अगर संसाधन के लिए विवाद हो?

4 - प्रश्न में नियंत्रक तर्क के विभिन्न हिस्सों को अनचेक करने का प्रयास करें। उदाहरण के लिए, यदि आप अपने कोड को हैक करने के बजाय बस एक स्थिर हैलो विश्व प्रतिक्रिया वापस करने के लिए यह कितना अच्छा है? मैं शर्त लगाता हूं कि अचानक यूनिकॉर्न तेजी से तेज होगा। फिर जब तक आप धीमेपन के स्रोत की खोज न करें तब तक अपने कोड के कुछ हिस्सों में वापस जोड़ने का प्रयास करें।