2011-09-19 29 views
5

जैसा कि मैं top उपयोगिता celery प्रोसेस में बहुत सी CPU समय का उपभोग कर सकता हूं। तो मैं इसे प्रोफाइल करना चाहता हूं।सेलेरी कार्य प्रोफाइलिंग

मैं तो जैसे डेवलपर मशीन पर मैन्युअल रूप से यह कर सकते हैं:

python -m cProfile -o test-`date +%Y-%m-%d-%T`.prof ./manage.py celeryd -B 

लेकिन सही समय मैं उत्पादन मशीन पर यह प्रोफ़ाइल करने की जरूरत है। उस मशीन पर (फेडोरा 14) अजवाइन स्क्रिप्ट द्वारा अजवाइन लॉन्च किया जाता है। जैसे

service celeryd start 

मैं पता लगा है ये स्क्रिप्ट अंततः manage.py celeryd_multi अंत में कहते हैं। तो मेरा सवाल यह है कि प्रोफाइलिंग सक्षम के साथ सेलेरी शुरू करने के लिए मैं celeryd_multi कैसे कह सकता हूं? मेरे मामले में इसका मतलब है -m cProfile -o out.prof विकल्प python पर जोड़ें।

किसी भी मदद की बहुत सराहना की जाती है।

उत्तर

12

मुझे लगता है कि आप दो अलग-अलग मुद्दों को भ्रमित कर रहे हैं। आप बहुत से व्यक्तिगत कार्यों को संसाधित कर सकते हैं या एक व्यक्तिगत कार्य अक्षम हो सकता है।

आप जानते हैं कि इनमें से कौन सी समस्या है, लेकिन यह आपके प्रश्न से स्पष्ट नहीं है।

यह ट्रैक करने के लिए कि कितने कार्यों को संसाधित किया जा रहा है, मेरा सुझाव है कि आप celerymon देखें। यदि कोई विशेष कार्य अधिक बार प्रकट होता है जिसे आप उम्मीद करेंगे तो आप जांच कर सकते हैं कि इसे कहां से बुलाया जा रहा है।

पूरे सेलेरी का प्रोफाइलिंग शायद सहायक नहीं है क्योंकि आपको बहुत सारे कोड मिलेंगे जिन पर आपका कोई नियंत्रण नहीं है। जैसा कि आप कहते हैं इसका मतलब यह भी है कि आपको उत्पादन में इसे चलाने में समस्या है। मेरा सुझाव है कि आप सीधे अपनी कार्य परिभाषा में profiling code जोड़ना देखें।

आप सेलेरी और आपके कोड के बीच संकेत की एक परत के रूप में cProfile.run('func()') का उपयोग कर सकते हैं ताकि कार्य के प्रत्येक भाग को प्रोफाइल किया जा सके। यदि आप एक अद्वितीय फ़ाइल नाम उत्पन्न करते हैं और इसे run पर दूसरे पैरामीटर के रूप में पास करते हैं, तो आपके पास एक कार्य-दर-कार्य आधार पर एक निर्देशिका डेटा से भरा निर्देशिका हो सकती है, या एक साथ कई कार्य रनों को एक साथ जोड़ने के लिए pstats.add का उपयोग करें।

अंत में, प्रति-कार्य प्रोफाइलिंग का अर्थ है कि आप अपने सर्वर पर इनिट स्क्रिप्ट को संशोधित करने की आवश्यकता के बजाय अपने प्रोजेक्ट कोड में या तो वैश्विक रूप से या कार्य द्वारा सेटिंग का उपयोग करके प्रोफाइलिंग चालू या बंद कर सकते हैं।

+0

'सेलेरियम' अब बनाए रखा नहीं गया है। – harukaeru

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