2009-04-14 12 views
13

मुझे अपने डीजेंगो ऐप्स के प्रदर्शन की जांच करने में दिलचस्पी है, मैं लाइन प्रदर्शन डेटा से लाइन प्राप्त करने का सबसे अच्छा तरीका क्या है?बेंचमार्किंग django ऐप्स

नोट: यह गुगल करने से बहुत सारे लोग खुद को django बेंचमार्किंग करते हैं। मैं django के बेंचमार्क की तलाश नहीं कर रहा हूं, मैं लिख रहा हूं कि django ऐप्स के प्रदर्शन का परीक्षण करने की कोशिश कर रहा हूं :)

धन्यवाद!

संपादित: "लाइन द्वारा लाइन" मैं सिर्फ अलग-अलग काम करता है, db कॉल, आदि के समय पता लगाने के लिए जहां बाधाओं ठोस रूप से सामग्री

+0

कृपया "लाइन-दर-लाइन प्रदर्शन डेटा" को परिभाषित करें –

+0

क्षमा करें, मेरा मतलब यह है कि कोड की प्रत्येक पंक्ति के साथ-साथ समय प्रति फ़ंक्शन, डीबी कॉल इत्यादि के लिए कितना समय लगता है, – Jiaaro

उत्तर

7

इस के लिए दो परतों है पर हैं मतलब है। हमारे परीक्षण के लिए हमारे पास # 1 स्थान है। हम # 2 पर शुरू होने वाले हैं।

  1. अलगाव में Django। सामान्य Django इकाई परीक्षण यहाँ अच्छी तरह से काम करता है। कुछ परीक्षण बनाएं जो कुछ (6 से कम) "सामान्य" उपयोग मामलों के माध्यम से चक्र बनाते हैं। इसे प्राप्त करें, पोस्ट करें, आदि। समय डेटा एकत्रित करें। यह वास्तविक वेब प्रदर्शन नहीं है, लेकिन यह परीक्षण परिदृश्य के साथ काम करने में आसान है जिसे आप ट्यूनिंग के लिए उपयोग कर सकते हैं।

  2. आपका पूरा वेब स्टैक। इस मामले में, आपको एक नियमित सर्वर चलाना चाहिए जिसमें स्क्विड, अपाचे, डीजेगो, माईएसक्यूएल, जो भी हो। क्लाइंट को urllib2 के माध्यम से अपनी वेबसाइट का अभ्यास करने के लिए आपको एक दूसरे कंप्यूटर की आवश्यकता है, कुछ (6 से कम) "सामान्य" उपयोग के मामलों को कर रहे हैं। इसे प्राप्त करें, पोस्ट करें, आदि। समय डेटा एकत्रित करें। यह अभी भी "असली" वेब प्रदर्शन नहीं है, क्योंकि यह इंटरनेट के माध्यम से नहीं है, लेकिन यह उतना ही करीब है जितना आप वास्तव में विस्तृत सेटअप के बिना प्राप्त करने जा रहे हैं।

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

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


संपादित

"पंक्ति-दर-पंक्ति" का अर्थ है, तो "रूपरेखा", ठीक है, यदि आप एक अजगर प्रोफाइलर चल पाने के लिए मिल गया है।

https://docs.python.org/library/profile.html

नोट वहाँ Django ORM परत में कैशिंग के बहुत सारे है कि। इसलिए मापन का सार्थक सेट प्राप्त करने के लिए एक आधा दर्जन बार एक दृश्य चलाना समझदार नहीं है। आपको संचालन के "सामान्य" सेट को चलाने और फिर प्रोफ़ाइल में हॉट-स्पॉट ढूंढना होगा।

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

+0

धन्यवाद, मैं था अधिकतर नंबर 1 का जिक्र करते हुए ... मुझे संदेह है कि उत्तरहीन जवाब हो सकता है! btw ... एस लोट आपको लगभग हर सवाल मैं पोस्ट का जवाब दे दिया गया है, यह बहुत सराहना की है :) मैं कॉलेज में एक वरिष्ठ हूँ और मैं ढेर अतिप्रवाह पर इतना सीखा है – Jiaaro

+0

के लिए धन्यवाद दयालु शब्द। –

5

लाइन प्रदर्शन डेटा (प्रोफाइलिंग) द्वारा लाइन प्राप्त करने का एक तरीका आपके Django ऐप को डब्ल्यूएसजीआई मिडलवेयर घटक जैसे repoze.profile का उपयोग करना है।

आप अपाचे के साथ mod_wsgi उपयोग कर रहे हैं आप इस तरह से अपने ऐप्लिकेशन में repoze.profile सम्मिलित कर सकते हैं मान लिया जाये:

... 
application = django.core.handlers.wsgi.WSGIHandler() 
... 
from repoze.profile.profiler import AccumulatingProfileMiddleware 
application = AccumulatingProfileMiddleware(
    application, 
    log_filename='/path/to/logs/profile.log', 
    discard_first_request=True, 
    flush_at_shutdown=True, 
    path='/_profile' 
) 

और अब आप अपने ब्राउज़र/अपने प्रोफ़ाइल डेटा देखने पर _profile को इंगित कर सकते हैं। बेशक यह mod_python या आंतरिक Django सर्वर के साथ काम नहीं करेगा।

+0

ऐसा कुछ भी करता है जो mod_python के लिए मौजूद है? – Jiaaro

+0

यह सिर्फ मानक पायथन प्रोफाइलर को कॉल कर रहा है (http://docs.python.org/library/profile.html देखें) तो शायद एक तरीका है, लेकिन मुझे यकीन है कि किसी को भी इसे modppython के रूप में अच्छी तरह से पैकेज करने के लिए कोई प्रेरणा नहीं है मारा हुआ। –

+0

मुझे यह भी जोड़ना चाहिए कि आउटपुट को फिर से देखने के बाद, यह वास्तव में लाइन-दर-लाइन प्रदर्शन डेटा नहीं है। यह प्रत्येक विधि/फ़ंक्शन को निष्पादित करने में व्यतीत समय की मात्रा के साथ एक लॉग है, जो कि करीब है लेकिन लाइन-दर-रेखा के समान नहीं है। –

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