2012-06-04 21 views
6

पृष्ठभूमि:पायथन: कोड के टुकड़े के लिए आप सीपीयू खपत कैसे पा सकते हैं?

मैं एक Django आवेदन, यह काम करता है और कम लोड पर बहुत अच्छी तरह से प्रतिक्रिया करता है, लेकिन 100 उपयोगकर्ता/सेकंड की तरह उच्च लोड पर, यह तो कमी के कारण सीपीयू और 100% की खपत के सीपीयू को धीमा कर देती है ।

समस्या:

  • आवेदन रूपरेखा मुझे कार्यों द्वारा उठाए गए समय देता है।
  • इस बार उच्च लोड पर बढ़ता है।
  • उपभोग की गई जटिल जटिल गणना या सीपीयू की प्रतीक्षा के कारण हो सकती है।

तो, कोड के टुकड़े से सीपीयू चक्रों का उपभोग कैसे करें?

चूंकि, CPU खपत को कम करने से प्रतिक्रिया समय बढ़ जाएगा।

  • मैं अत्यंत कुशल कोड लिखा हो सकता है और अधिक CPU शक्ति जोड़ने की जरूरत है

या

  • मैं कुछ बेवकूफ कोड सीपीयू ले जा रहा है और नीचे धीमी गति से पैदा कर रहा हो सकता है?

किसी भी मदद की सराहना की जाती है!

अद्यतन:

  • मैं अपने webapp प्रोफ़ाइल JMeter उपयोग कर रहा हूँ, यह मेरे 2 अनुरोध/सेकंड की एक प्रवाह क्षमता देता है। [100 उपयोगकर्ता]
  • मुझे 1 अनुरोध पर 100 अनुरोध बनाम 1.25 सेकंड समय पर 36 सेकंड का औसत समय मिलता है।

अधिक जानकारी

  • विन्यास Nginx 4 श्रमिकों
  • कोई डेटाबेस का इस्तेमाल किया, एक REST API
  • 1 पर से एक प्रतिक्रियाओं का उपयोग कर के साथ Uwsgi मारा बाकी एपीआई के प्रतिक्रिया को कैश्ड हो जाता है , इसलिए कोई फर्क नहीं पड़ता है।
  • जेसन पार्सिंग के लिए ujson का उपयोग करना। पता करने के लिए

जिज्ञासु:

  • अजगर-Django इतने सारे बड़े साइटों के लिए इतने सारे संगठनों के द्वारा प्रयोग किया जाता है, तो वहाँ कुछ उच्च अंत डीबग/स्मृति-सीपीयू विश्लेषण उपकरण होना चाहिए।
  • जो कुछ मैंने पाया वह कोड के आकस्मिक स्निपेट थे जो प्रोफाइलिंग करते थे।
+0

प्रोफाइलिंग में मेरा पहला कदम यह देखना है कि * कौन सा फ़ंक्शन * अधिकांश समय व्यतीत होता है, और वे जांच करते हैं कि क्यों, अगर यह उचित है, और यदि इसे कम किया जा सकता है। समय की * राशि * (अक्सर) * आनुपातिक राशि * समय के रूप में महत्वपूर्ण नहीं है। –

+0

हर समय लिया गया पूरे आवेदन में वितरित किया जाता है। कोई विशिष्ट बिंदु एक समस्या क्षेत्र प्रतीत नहीं होता है। –

+1

लगता है? क्या आपने सटीक माप किया? मदद के लिए http://stackoverflow.com/a/582337/851737 देखें। – schlamar

उत्तर

2

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

इसके अलावा, धीरे-धीरे लोड को बढ़ाकर आप यह देखने में सक्षम होंगे कि सीपीयू में क्रमिक वृद्धि हुई है (सीपीयू बाधा का सुझाव देना) या यदि सीपीयू में अचानक कूद है (शायद किसी अन्य प्रकार की समस्या का सुझाव देना, एक जो आवश्यक रूप से अधिक सीपीयू द्वारा संबोधित नहीं किया जाएगा)।

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

+0

शुरुआत के लिए अच्छी सलाह .. मैं आपके द्वारा सुझाए गए विकल्पों का पता लगाऊंगा। इसके अलावा, मैं django/पायथन के लिए एक निंजा प्रोफाइलिंग टूल देख रहा हूं - यह सिस्टम में एक और अधिक बारीक दिख सकता है। :) –

+0

हास्यास्पद यह चेक किया गया है लेकिन -1 प्राप्त करता है .... geesh – user1012451

0

चेकआउट New Relic, वे Django विशिष्ट प्रवेश मिल गया है।

संबंधित मुद्दे