2015-06-28 5 views
7

भी नहीं मिल रहा है मैं एक django ऐप की सेवा के लिए nginx + gunicorn का उपयोग कर रहा हूं और इसे EC2 (m1.small इंस्टेंस) पर तैनात किया है।Django + Gunicorn + nginx बहुत खराब प्रदर्शन पैदा करता है। 8 क्यूपीएस

def hi(request): 
    return HttpResponse('hi', content_type='text/plain') 

/hi/ यूआरएल के लिए मैप किया गया:

मैं इस दृष्टिकोण है। तो यह मूल रूप से पर [myurl]/hi पर आता है।

अब जब मैं परीक्षण लोड इस डोमेन ([myurl]/hi) loader.io से, यह और भी 30 सेकेंड परीक्षण से अधिक 250 ग्राहकों में नहीं होता है। (प्रति सेकंड लगभग 8 अनुरोध)

This is (मेरा हिस्सा) मेरी nginx access.log फ़ाइल। यह मूल रूप से कुछ 200 एस के बाद 499 एस देता है। (Loader.io में टाइमआउट 10 सेकेंड पर सेट है)

मुझे कुछ गंभीरता से गलत करना होगा। मैं कैसे जानूं?

मैं इसे yet-another-django-profiler का उपयोग कर और निम्न उत्पादन होता है प्रोफाइल: enter image description here

मैं लचीला बीनस्टॉक (जो अपाचे सर्वर का उपयोग करता) भी (m3.large उदाहरण) पर इस Django अनुप्रयोग तैनात है, और वहाँ भी मैं भयानक प्रदर्शन प्राप्त । अब तक मेरे मिडलवेयर है: यह की

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware', 
    # 'django.middleware.common.CommonMiddleware', 
    # 'django.middleware.csrf.CsrfViewMiddleware', 
    # 'silk.middleware.SilkyMiddleware', 
    # 'yet_another_django_profiler.middleware.ProfilerMiddleware', 
    # 'debug_toolbar.middleware.DebugToolbarMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    # 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
    # 'django.contrib.messages.middleware.MessageMiddleware', 
    # 'django.middleware.clickjacking.XFrameOptionsMiddleware', 
    # 'django.middleware.security.SecurityMiddleware', 
) 

इससे पहले कोई भी टिप्पणी की गई थी। जब मैंने इन 9 लाइनों पर टिप्पणी की, तो मुझे एक प्रदर्शन बढ़ावा मिला। अब मैं इस ऐप से 60 क्यूपीएस प्राप्त कर सकता हूं। लेकिन मुझे लगता है कि मैं और अधिक गलती कर रहा हूं और यह आगे बढ़ सकता है।

+1

मेरा पहला अनुमान यह होगा कि आपने सिस्टम को गलत कॉन्फ़िगर किया है। उदाहरण के लिए हो सकता है कि आपके पास बंदूकधारी के लिए [पर्याप्त कार्यकर्ता थ्रेड निर्दिष्ट नहीं किया गया है] (http://gunicorn-docs.readthedocs.org/en/latest/design.html#how-many-workers)। यदि आप पहले से ही कवर कर चुके हैं, तो आपको अपनी बाधा झूठ बोलना शुरू कर देना चाहिए - सीपीयू, रैम, डिस्क या नेटवर्क। लोड होने के दौरान कुछ CPU और प्रतिक्रिया समय प्रदान करना (उदा। 'Vmstat' से' और 'tcpdump' से अनुरोध/प्रतिक्रिया समय को देखकर) इस बिंदु पर सहायता करेगा। –

+1

1. गनिकोर्न लॉन्च करने के लिए आप किस कमांड का उपयोग कर रहे हैं? 2. आपकी सेटिंग्स फ़ाइल किस तरह दिखती है (विशेष रूप से मिडलवेयर)? 3।उस सर्वर पर और क्या चल रहा है? – Seth

+0

@ सेठ: हाँ, मिडलवेयर समस्या का हिस्सा था। सर्वर पर और कुछ नहीं चल रहा है। इसके अलावा मैं गनिकोर्न लॉन्च कर रहा हूं [इस स्क्रिप्ट के साथ] (http://pastebin.com/DezHbyiC)। – kamalbanga

उत्तर

1

यह और अधिक पर जाने के लिए बिना अंधेरे में सिर्फ एक चाकू है, और मैं अपने मूल प्रश्न पर टिप्पणी करने से enought प्रतिष्ठा की जरूरत नहीं है: मैंने देखा अपने gunicorn स्टार्टअप स्क्रिप्ट

--log-level=debug

है कि आप डिबग है लेवल लॉगिंग (गनिकोर्न में और विशेष रूप से डैंजो प्रोजेक्ट में) यह समझाएगा कि मिडलवेयर पर टिप्पणी करके प्रदर्शन क्यों बढ़ाया गया था और आप एक अलग तैनाती वास्तुकला से अपमानित प्रदर्शन क्यों जारी रखेंगे।

डीबग स्तर लॉगिंग आउटपुट बहुत सारी जानकारी।

0

मुझे आपके बारे में कोई जानकारी नहीं है कि आपने क्या गलत किया है, लेकिन क्या मैं आपको गनिकोर्न के बजाय uWSGI का उपयोग करके फिर से परीक्षण करने का सुझाव दे सकता हूं? कई मानकों के मुताबिक, यूडब्ल्यूएसजीआई गनिकोर्न की तुलना में बेहतर प्रदर्शन प्रदान करता है और यदि प्रदर्शन महत्वपूर्ण रूप से नहीं बदलता है तो आप nginx या EC2 कॉन्फ़िगरेशन पर अपनी जांच को ध्यान में रख सकेंगे। मैं उन्मूलन की प्रक्रिया के माध्यम से आपको खोजने के लिए प्रोत्साहित करने के लिए धर्मांतरण नहीं करना चाहता हूं।

आशा है कि इससे मदद मिलेगी!

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