2016-03-22 8 views
9

मेरा एप्लिकेशन सर्वर पक्ष पर uWSGI के साथ nginx का उपयोग करता है। जब मैं एक बड़ी अनुरोध (एक प्रतिक्रिया समय के साथ> 4s) करते हैं, निम्नलिखित प्रकट होता है:uWSGI ओएसईआरआरआई उठाता है: बड़े अनुरोध के दौरान त्रुटि लिखें

SIGPIPE: writing to a closed pipe/socket/fd (probably the client 
    disconnected) on request _URL_ (ip XX.XX.XX.XX) !!! 

uwsgi_response_writev_headers_and_body_do(): Broken pipe 
    [core/writer.c line 287] during GET _URL_ (XX.XX.XX.XX) 

OSError: write error 

ऐसा लगता है कि uWSGI एक धारा में लिखने के लिए कोशिश करता है लेकिन इस धारा को पहले से ही बंद कर दिया गया। जब मैं nginx लॉग (error.log) की जाँच करें:

upstream prematurely closed connection while reading response 
    header from upstream ... 
बेशक

, मेरे मुवक्किल (बाकी ग्राहक या ब्राउज़र) एक 502 त्रुटि प्राप्त करता है।

मुझे हमेशा यह त्रुटि ~ 4s के बाद मिलती है।

हालांकि, मुझे नहीं पता कि इस मुद्दे को कैसे रोकें। मैं अपने nginx कॉन्फ़िग फ़ाइल में कुछ मानकों सेट करने की कोशिश की:

location my_api_url { 
    [...] 
    uwsgi_buffer_size 32k; 
    uwsgi_buffers 8 32k; 
    uwsgi_busy_buffers_size 32k; 

    uwsgi_read_timeout 300; 
    uwsgi_send_timeout 300; 

    uwsgi_connect_timeout 60; 
} 

लेकिन समस्या अभी भी यहाँ है। मैं भी uWSGI विन्यास फाइल (wsgi.ini) में इन मानकों सेट करने की कोशिश की:

buffer-size=8192 
ignore-sigpipe=true 
ignore-write-errors=true 

से पहले प्रतिक्रिया समय का अनुकूलन करने की कोशिश करने के लिए, मुझे आशा है कि इस मुद्दे पर एक समाधान है। मुझे ऐसा कोई नहीं मिला जो किसी अन्य पोस्ट में काम कर रहा हो। मैं बड़ी मात्रा में डेटा के साथ काम करता हूं, इसलिए कुछ मामलों के लिए मेरा प्रतिक्रिया समय 4-10 के बीच होगा।

आशा है कि आप मेरी मदद कर सकते हैं :)

बहुत पहले से धन्यवाद।

+0

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

उत्तर

5

यह मामला हो सकता है कि जब आप चीजें अपलोड करते हैं, तो आप खंडित एन्कोडिंग का उपयोग करते हैं। uWSGI विकल्प --chunked-input-timeout है, कि डिफ़ॉल्ट रूप से 4 सेकंड है (यह defaults --socket-timeout का मूल्य है, जो 4 सेकंड है करने के लिए)।

हालांकि सैद्धांतिक रूप से समस्या कहीं और झूठ बोल सकती है, मेरा सुझाव है कि आप उपरोक्त विकल्पों को आजमाएं। साथ ही, कष्टप्रद अपवाद कारण हैं, जिनके चलते मैं अपने uWSGI config (ध्यान दें कि मैं 3 विकल्प प्रदान करते हैं, 2 नहीं) में

ignore-sigpipe=true 
ignore-write-errors=true 
disable-write-exception=true 

है: ignore-sigpipe बनाता uWSGI SIGPIPE त्रुटियों नहीं दिखा; ignore-write-errors यह के साथ त्रुटियों को नहीं दिखाता है। uwsgi_response_writev_headers_and_body_do; disable-write-exception लिखने पर OSError पीढ़ी को रोकता है।

+0

धन्यवाद! वास्तव में मदद जवाब! – JulCh

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