2009-11-14 9 views
16

मैं fastggi के साथ nginx का उपयोग करें। मैं देख रहा हूँ त्रुटि में निम्न त्रुटियों की एक बहुत कुछ लॉगnginx त्रुटियों readv() और recv() विफल

readv() failed (104: Connection reset by peer) while reading upstream and recv() failed (104: Connection reset by peer) while reading response header from upstream

मुझे कोई समस्या एप्लिकेशन का उपयोग नहीं दिख रहा है। क्या ये त्रुटियां गंभीर हैं या उनसे कैसे छुटकारा पाएं।

उत्तर

10

मैं पृष्ठभूमि में php-fpm का उपयोग कर रहा था और धीमी स्क्रिप्ट्स ने कहा कि टाइमआउट के बाद मारे जा रहे थे क्योंकि इसे इस तरह से कॉन्फ़िगर किया गया था। इस प्रकार, निर्दिष्ट समय से अधिक समय तक चलने वाली स्क्रिप्ट मारे जाएंगी और nginx एक recv या readv त्रुटि की रिपोर्ट करेगा क्योंकि कनेक्शन php-fpm इंजन/प्रक्रिया से बंद है।

+1

क्या आपको कभी भी PHP त्रुटि लॉग या संदेश से बाहर निकलने का कोई तरीका मिला है? – Bretticus

+0

हाँ php-fpm-slow log। इस लॉग को सक्षम करने के लिए आपको php-fpm.conf को कॉन्फ़िगर करना चाहिए – rampr

2

यह एक बहुत ही अस्पष्ट त्रुटि है क्योंकि इसका मतलब कुछ चीजें हो सकता है। कुंजी सभी संभावित लॉग देखने और इसे समझने के लिए है। मेरे मामले में, जो शायद कुछ हद तक अद्वितीय है, मेरे पास एक काम कर रहे nginx + php/fastcgi config था। मैं PHP के एक नए अद्यतन संस्करण को PHP-FPM के साथ संकलित करना चाहता था और मैंने ऐसा किया। कारण यह था कि मैं एक ऐसे लाइव सर्वर पर काम कर रहा था जो डाउनटाइम बर्दाश्त नहीं कर सका। इसलिए मुझे अपग्रेड करना पड़ा और PHP-FPM को यथासंभव सहजता से ले जाना पड़ा।

इसलिए मेरे पास PHP के 2 उदाहरण थे।

  • 1 सीधे FastCGI के साथ (5.3.4 PHP) बात कर - यूनिक्स सॉकेट का उपयोग कर - - टीसीपी/127.0.0.1:9000 (5.3.4 PHP)
  • 1 पीएचपी-एफ पी एम के साथ विन्यस्त का उपयोग कर यूनिक्स:/dir// सॉकेट-एफ पी एम (PHP 5.3.8)

एक बार मैं टीसीपी के बजाय एक गर्तिका कनेक्शन मैं पर इस नदी के ऊपर त्रुटि आने शुरू हो गए का उपयोग कर एक nginx vhost में PHP एफ पी एम (PHP 5.3.8) को शुरू करने के लिए कोई भी fastcgi पृष्ठ x मिनट से अधिक समय ले रहा है चाहे वे एफपीएम का उपयोग कर रहे हों या नहीं। आम तौर पर यह पेज MySQL में बड़े चयन कर रहा था जो लोड करने के लिए ~ 2 मिनट लेता था। बुरा मुझे पता है, लेकिन यह बैक एंड डीबी डिजाइन की वजह से है।

मैंने इसे ठीक करने के लिए क्या किया था इसे मेरे vhost कॉन्फ़िगरेशन में जोड़ा गया: fastcgi_read_timeout 5m; अब यह nginx वैश्विक fastcgi सेटिंग्स में भी जोड़ा जा सकता है। यह आपके सेट अप पर निर्भर करता है। http://wiki.nginx.org/HttpFcgiModule

1

उत्तर # 2. दिलचस्प रूप से पर्याप्त fastcgi_read_timeout 5m; मेरे लिए एक vhost तय। हालांकि मुझे अभी भी phpinfo() चलाकर, किसी अन्य vhost में त्रुटि मिल रही थी; मेरे लिए यह तय किया गया था कि एक डिफ़ॉल्ट उत्पादन php.ini फ़ाइल पर प्रतिलिपि बनाकर और उस कॉन्फ़िगरेशन को जोड़कर मुझे इसमें शामिल किया गया था। पिछले PHP इंस्टॉल से मेरी php.ini की पुरानी प्रतिलिपि थी। एक बार जब मैंने 'साझा' से डिफ़ॉल्ट php.ini डाला और बस मुझे आवश्यक एक्सटेंशन और कॉन्फ़िगरेशन में जोड़ा गया, तो यह मेरी समस्या हल हो गई और अब मेरे पास nginx त्रुटियां readv() और recv() विफल नहीं हुईं।

मुझे उम्मीद है कि इनमें से 1 फिक्सेस किसी की मदद करता है।

3

इस त्रुटि के बारे में:

readv() failed (104: Connection reset by peer) while reading upstream and recv() failed (104: Connection reset by peer) while reading response header from upstream

1 अधिक मामले में जहां मैं अभी भी इस को देख सकता था नहीं था। त्वरित की स्थापना अवलोकन:

  • CentOS 5.5
  • पीएचपी-एफ पी एम 5.3 के साथ PHP।8 पूल php-एफ पी एम config में (कुछ 3 पार्टी के साथ शुरू से संकलित मॉड्यूल)
  • Nginx 1.0.5

पीएचपी-एफ पी एम त्रुटि लॉग में रूप में अच्छी तरह देख रही है और catch_workers_output सक्रिय करने के बाद = हाँ , मैंने पाया कि इस मामले में मूल कारण वास्तव में एफ़ेक्स्ट मॉड्यूल (फ्लैश के लिए PHP मॉड्यूल) था। a known bug and fix for this module है जिसे amf.c फ़ाइल को बदलकर सही किया जा सकता है।

इस PHP एक्सटेंशन समस्या को ठीक करने के बाद, ऊपर की त्रुटि अब कोई समस्या नहीं थी।

0

यह भी एक बहुत ही साधारण समस्या हो सकती है - आपके कोड में कहीं भी एक अनंतता कण है, या एक अनंतता आपके पृष्ठ पर बाहरी होस्ट को जोड़ने की कोशिश कर रही है।

0

कुछ बार अनुरोधों के कारण यह समस्या होती है। डिफ़ॉल्ट रूप से pm.max_requests php5-fpm में शायद 100 या नीचे है।

वह अपने मूल्य में वृद्धि अपनी साइट के अनुरोध पर निर्भर करते हैं हल करने के लिए, उदाहरण के 500

के लिए और करने के बाद आप सेवा

sudo service php5-fpm restart 
0

दूसरों fastcgi_read_timeout पैरामीटर का उल्लेख किया है पुनः आरंभ करना, जो nginx.conf फ़ाइल में स्थित है:

http { 
    ... 
    fastcgi_read_timeout 600s; 
    ... 
} 

इसके अलावा, मेरे पास भी टी नहीं था ओ सेटिंग बदलते request_terminate_timeout फ़ाइल में: /etc/php5/fpm/pool.d/www.conf

request_terminate_timeout = 0 

जानकारी के स्रोत (वहाँ भी कर रहे हैं php.ini मापदंडों को बदलने के लिए कुछ अन्य सिफारिशों, जो कुछ मामलों में प्रासंगिक हो सकता है): https://ma.ttias.be/nginx-and-php-fpm-upstream-timed-out-failed-110-connection-timed-out-or-reset-by-peer-while-reading/