2009-09-25 11 views
6

सबसे पहले मैं अपने डीजेगो संचालित साइट के प्रदर्शन से नाखुश नहीं हूं, इसे बड़े पैमाने पर यातायात नहीं मिल रहा है, अब तक प्रति दिन 1000 से ज्यादा बार दौरे हैं।Django (apache2 prefork/mod_wsgi) में समरूपता का प्रदर्शन, मैं क्या गलत कर रहा हूं?

मैं उत्सुक था कि यह भारी ट्रैफिक चोटियों से कितना अच्छा सामना करेगा, इसलिए मैंने कुछ बेंचमार्किंग करने के लिए एबी-टूल का उपयोग किया।

मैंने देखा कि जब प्रदर्शन 1 से बड़ा है तो प्रदर्शन 1 समवर्ती कनेक्शन के रूप में अनुरोध की समान राशि प्रदान करता है।

समवर्तीता के साथ reqs/s वृद्धि नहीं करनी चाहिए?

1 जीबी रैम, apache2 (prefork), mod_wsgi, memcached और mysql के साथ वर्चुअल मशीन पर Im।
पृष्ठ पर सभी सामग्री को कैश किया गया है, डेटाबेस कोई हिट नहीं लेता है। और अगर memcached प्रविष्टि छोड़ देंगे, केवल 2 प्रकाश (अनुक्रमित) प्रश्न हैं - और तुरंत फिर से कैश किया जाना चाहिए।

बेंचमार्किंग डेटा: (ध्यान दें: मैं बेंचमार्क यह एक ही परिणाम के साथ 2000 और 10k अनुरोध के साथ किया था):
-n100 -c4: http://dpaste.com/97999/

प्रारंभ पृष्ठ के लिए, apache2/mod_wsgi के माध्यम से Django द्वारा सेवा (58.2 reqs/s)
-n100 -c1: http://dpaste.com/97998/ (57.7 reqs/s)

robots.txt के लिए, apache2 से सीधे:
-n100 -c4: http://dpaste.com/97992/ (4917 reqs/s)
-n100 -c1: http://dpaste.com/97991/ (1412 reqs/s)

यह मेरा अपाचे conf: http://dpaste.com/97995/

संपादित करें: जोड़ा अधिक जानकारी

wsgi.conf: http://dpaste.com/98461/

mysite। conf: http://dpaste.com/98462/

मेरा wsgi-handler:

import os, sys 
os.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.settings' 
import django.core.handlers.wsgi 
application = django.core.handlers.wsgi.WSGIHandler() 
+2

आप यह इंगित नहीं करते कि अपाचे को प्रीफ़ोर या कार्यकर्ता एमपीएम के साथ संकलित किया गया है या नहीं। आप mod_wsgi द्वारा होस्ट किए गए कॉन्फ़िगरेशन की आपूर्ति नहीं करते हैं, इसलिए यदि आप एम्बेडेड मोड या डिमन मोड का उपयोग कर रहे हैं तो कोई विचार नहीं है। बेंचमार्किंग नमूने के लिए 100 अनुरोधों का उपयोग करने से अच्छे नतीजे भी नहीं मिलेंगे, आमतौर पर आप हजारों का उपयोग करना चाहते हैं। यह भी नहीं बता सकता कि आपने यह सुनिश्चित किया है कि आपने स्टार्टअप देरी को समाप्त कर दिया है। अपाचे/mod_wsgi पाइथन वेब एप्लिकेशन को आलसी लोड करेगा। अगर आपका अनुरोध डेटाबेस के खिलाफ है और क्या यह समस्या है तो भी कोई संकेत नहीं है। अधिक जानकारी की आवश्यकता है। –

+0

अधिक जानकारी जोड़ा गया। मैंने 2000 और 10k अनुरोधों के साथ उसी परिणाम के साथ बेंचमार्क किया। अनुरोध डेटाबेस को बिल्कुल भी हिट नहीं करता है, मैंने यह सुनिश्चित कर लिया है कि सबकुछ कैश किया गया है (memcached), और शीर्ष मुझे केवल उन्हीं अपाचे प्रक्रियाओं को बताता है जो संसाधनों का उपयोग कर रहे हैं। – schmilblick

+0

ओह और वास्तव में हेडर में "prefork" था, ताकि जानकारी प्रदान की गई हो। इसे स्पष्टता के लिए अब पाठ में जोड़ा गया। – schmilblick

उत्तर

12

जैसा कि आप कई प्रक्रियाओं के साथ एम्बेडेड मोड में प्रीफ़ोर एमपीएम और mod_wsgi का उपयोग कर रहे हैं, तो आप संभवतः अपने बॉक्स के प्रदर्शन को मार रहे हैं। एक शुरुआत के लिए, सुझाव है कि आप पढ़ा:

http://blog.dscpl.com.au/2009/03/load-spikes-and-excessive-memory-usage.html

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

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

Connection Times (ms) 
       min mean[+/-sd] median max 
Connect:  0 0 0.0  0  0 
Processing:  0 0 0.2  0  2 
Waiting:  0 0 0.1  0  2 
Total:   0 0 0.2  0  2 

अधिकतम स्तंभ बड़े मूल्यों, तो आप की वजह से आवेदन लोड हो रहा है लागत से मारा जा रहा है पता चलता है: पर ध्यान देना

एक बात आप 'अब' उत्पादन के निम्न वर्ग के लिए क्या मिलता है प्रीलोडिंग के माध्यम से या तो अपने परीक्षणों से उन्हें समाप्त नहीं करने के लिए, या छोटी प्रक्रिया द्वारा अंतराल को पुनरारंभ करें।

+0

धन्यवाद! मुझे एहसास नहीं हुआ कि mod_wsgi डेमॉन मोड में चला सकता है। मैं इसे दो बार पढ़ रहा हूं और मेरी सेटिंग्स को ट्विक कर रहा हूं। यदि मैं आपके सुझाव को सही तरीके से पढ़ता हूं, तो आप कह रहे हैं कि मुझे apache2 का prefork संस्करण नहीं चलाया जाना चाहिए? – schmilblick

+2

यदि आप पाइथन डब्लूएसजीआई एप्लिकेशन चलाने के लिए डेमॉन मोड का उपयोग कर रहे हैं, तो इतना महत्वपूर्ण नहीं है कि आप कार्यकर्ता एमपीएम चला रहे हैं क्योंकि पाइथन कोड अब कोर अपाचे सर्वर बाल प्रक्रियाओं में नहीं चल रहा है। यदि आप mod_php का उपयोग कर PHP चला रहे हैं, तो भी आप अभी भी चल रहे प्रीफ़ोर एमपीएम के साथ फंस जाएंगे। फिर भी, अगर mod_php या किसी अन्य अपाचे मॉड्यूल पर निर्भर नहीं है जिसके लिए एकल थ्रेडेड अपाचे प्रक्रियाओं की आवश्यकता होती है, तो कार्यकर्ता एमपीएम का उपयोग करना बेहतर है। यहां तक ​​कि यदि आपको अभी भी एकल थ्रेडेड प्रीफ़ोर एमपीएम चलाने की ज़रूरत है, तो mod_wsgi डिमन प्रक्रियाओं को अभी भी बहुप्रचारित किया जा सकता है। –

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