Nginx + php-fpm "504 गेटवे टाइम-आउट" लगभग शून्य लोड के साथ त्रुटि (एक परीक्षण-सर्वर पर)


29

6 घंटे तक डिबग करने के बाद - मैं यह दे रहा हूँ: |

हमारे पास लगभग 100 वर्डप्रेस के साथ लैन में एक nginx + php-fpm + mysql है (परीक्षण वर्डप्रेस सेटअप पर काम करने वाले सभी डिजाइनरों / डेवलपर्स द्वारा बनाया और उपयोग किया जाता है)

हम लंबे समय से बिना किसी मुद्दे के nginx का उपयोग कर रहे हैं।

आज, अचानक - नग्नेक्स ने नीले रंग से "504 गेटवे टाइम-आउट" लौटाना शुरू कर दिया ...

मैंने वर्चुअल होस्ट के लिए nginx त्रुटि लॉग की जाँच की ...

2010/09/06 21:24:24 [error] 12909#0: *349 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 21:25:11 [error] 12909#0: *349 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 21:25:11 [error] 12909#0: *443 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET /info.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 21:25:12 [error] 12909#0: *443 connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 22:08:32 [error] 12909#0: *1025 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 22:09:33 [error] 12909#0: *1025 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 22:09:40 [error] 12909#0: *1064 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET /info.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 22:09:40 [error] 12909#0: *1064 connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 22:24:44 [error] 12909#0: *1313 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 22:24:53 [error] 12909#0: *1313 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"

जैसा कि मैंने TCP मोड के माध्यम से पोर्ट 9000 पर php-fpm चलाया है, मैंने "netstat | grep 9000" चलाया और कुछ असामान्य देखा ... (पढ़ने में आसानी के लिए आंशिक उत्पादन यहाँ पेस्ट करना)

tcp        9      0 localhost:9000          localhost:36094         CLOSE_WAIT  14269/php5-fpm  
tcp        0      0 localhost:46664         localhost:9000          FIN_WAIT2   -               
tcp     1257      0 localhost:9000          localhost:36135         CLOSE_WAIT  -               
tcp     1257      0 localhost:9000          localhost:36125         CLOSE_WAIT  -               
tcp        9      0 localhost:9000          localhost:36102         CLOSE_WAIT  14268/php5-fpm  
tcp        0      0 localhost:46662         localhost:9000          FIN_WAIT2   -               
tcp      745      0 localhost:9000          localhost:46644         CLOSE_WAIT  -               
tcp        0      0 localhost:46658         localhost:9000          FIN_WAIT2   -               
tcp     1265      0 localhost:9000          localhost:46607         CLOSE_WAIT  -               
tcp        0      0 localhost:46672         localhost:9000          ESTABLISHED 12909/nginx: worker
tcp     1257      0 localhost:9000          localhost:36119         CLOSE_WAIT  -               
tcp     1265      0 localhost:9000          localhost:46613         CLOSE_WAIT  -               
tcp        0      0 localhost:46646         localhost:9000          FIN_WAIT2   -               
tcp     1257      0 localhost:9000          localhost:36137         CLOSE_WAIT  -               
tcp        0      0 localhost:46670         localhost:9000          ESTABLISHED 12909/nginx: worker
tcp     1265      0 localhost:9000          localhost:46619         CLOSE_WAIT  -               
tcp     1336      0 localhost:9000          localhost:46668         ESTABLISHED -               
tcp        0      0 localhost:46648         localhost:9000          FIN_WAIT2   -               
tcp     1336      0 localhost:9000          localhost:46670         ESTABLISHED -               
tcp        9      0 localhost:9000          localhost:36108         CLOSE_WAIT  14274/php5-fpm  
tcp     1336      0 localhost:9000          localhost:46684         ESTABLISHED -               
tcp        0      0 localhost:46674         localhost:9000          ESTABLISHED 12909/nginx: worker
tcp     1336      0 localhost:9000          localhost:46666         ESTABLISHED -               
tcp     1257      0 localhost:9000          localhost:46648         CLOSE_WAIT  -               
tcp     1336      0 localhost:9000          localhost:46678         ESTABLISHED -               
tcp        0      0 localhost:46668         localhost:9000          ESTABLISHED 12909/nginx: wo             

"CLOSE_WAIT" और "FIN_WAIT2" जोड़े बहुत नीचे दिए गए हैं (ऊपर आउटपुट में):

tcp     1337      0 localhost:9000          localhost:46680         CLOSE_WAIT  -               
tcp        0      0 localhost:46680         localhost:9000          FIN_WAIT2   -

कृपया ऊपर 46680 पोर्ट नोट करें।

मैंने mysql को धीमी क्वेरी त्रुटि लॉग सक्षम किया, लेकिन यह काम नहीं किया।

अब के रूप में php5-fpm को हर मिनट एक क्रोनजोब के माध्यम से फिर से शुरू करना (नीचे कमांड देखें) सब कुछ "सुचारू रूप से" चल रहा है, लेकिन मैं पैचवर्क से नफरत करता हूं और इसे हल करना चाहता हूं ...

1 * * * * service php5-fpm restart > /dev/null

मैंने Google पर बड़े पैमाने पर खोज की - कोई मदद नहीं मिली। जैसा कि उल्लेख किया गया है, लैन में यह एक परीक्षण-सर्वर, सीपीयू लोड कभी भी 0.10 को पार नहीं करता है और मेमोरी का उपयोग भी 25% से कम है (सिस्टम में 2 जीबी रैम और ubuntu- सर्वर स्थापित है) इसलिए यदि आपको इसका समय-भ्रामक लगता है तो कृपया मेरी मदद करें। कम से कम एक संकेत छोड़ दें।

सहायता के लिए अग्रिम धन्यवाद।

-Rahul

(नोट - यह रीपोस्टिंग है - http://forum.nginx.org/read.php?11,12769494 )

अद्यतन: मुझे उत्तर मिला, जो नीचे पोस्ट किया गया है।

जवाबों:


31

मुझे nginx मंच पर अपनी पोस्टिंग के बारे में जवाब मिला - http://forum.nginx.org/read.php?2,78774

मेरे मामले में, उत्तर सेट करना है:

request_terminate_timeout=30s

php-fpm config (आमतौर पर /etc/php5/fpm/php-fpm.conf) में

ध्यान दें, आप 30 के अलावा अन्य मूल्यों का भी उपयोग कर सकते हैं।

मैंने इसका उपयोग मुख्य php.iniफ़ाइल में मेरे मूल्य से मेल खाने के लिए किया है:

max_execution_time = 30

सबको शुक्रीया। :-)


5
यह कॉन्‍फ़िगर www.conf फ़ाइल में भी मिल सकता है। जवाब के लिए धन्यवाद, हालांकि, इसने चाल चली है।
eddiemoya

2
यह एक पूल-स्तरीय निर्देश है, आपको इसे php-fpm.conf के [global]अनुभाग में डालने का प्रयास करते समय एक त्रुटि संदेश मिलेगा । यह वहाँ तभी काम करता है जब आपके पास अपना पूल भी हो। इसके अलावा: request_terminate_timeout डॉक्स
तनीस

यदि यह सही उत्तर है, जो कि मुझे वास्तव में चाहिए, तो यह शुक्रवार 2015 के लिए सबसे अच्छा होगा।
फिलिप

2
मैंने पाया कि request_terminate_timeout=30sमेरी php-fpm.confफ़ाइल में डालने से (111 कनेक्शन अस्वीकृत) त्रुटि हुई। जब मैंने इसे अपनी www.confफ़ाइल में स्थानांतरित किया तो यह काम कर गया।
एजेबी

CentOS 7.2 पर php7 का उपयोग करते समय, request_terminate_timeout स्थित है: /etc/php-fpm.d/www.conf
nadavkav

16

यहाँ इसने मेरी समस्या को कैसे हल किया:

http {अनुभाग में /etc/nginx/nginx.conf में निम्नलिखित परिवर्तन करें

proxy_connect_timeout  600s;
proxy_send_timeout  600s;
proxy_read_timeout  600s;
fastcgi_send_timeout 600s;
fastcgi_read_timeout 600s;

और फिर nginx को पुनरारंभ करें

/etc/init.d/nginx पुनरारंभ करें


2
हाँ, यह वास्तव में ऐसा नहीं लगता है कि इस समस्या का उस व्यक्ति से कोई लेना-देना है जो सवाल पूछ रहा है।
होपलेसनब बी

3
लेकिन सौभाग्य से मुझे यही चाहिए :)
luchaninov

इसने मेरे मुद्दे को ठीक नहीं किया, लेकिन इसने मुझे टाइमआउट संदेश के बजाय वास्तविक त्रुटि को देखने की अनुमति दी, जिससे मुझे वास्तविक समस्या का सामना करना पड़ा।
माइकल

4

यदि आप php 5.3 का उपयोग कर रहे हैं, तो बैकलॉग बढ़ाएँ।

यदि आप php 5.2 का उपयोग कर रहे हैं, तो 128 से बैकलॉग का आकार बढ़ाने के लिए पैच का बैकप लें।

इसके अलावा, टीसीपी सॉकेट के बजाय एक यूनिक्स सॉकेट का उपयोग करें। यूनिक्स: /tmp/php5-cgi.sock (या संबंधित पथ)


मुझे सहमत होना पड़ेगा, विशेषकर यूनिक्स सॉकेट के उपयोग से।
मैट

उत्तर के लिए धन्यवाद कर्मवहोर। मुझे nginx मेलिंग सूची पर एक समाधान मिला।
rahul286

@ rahul286 जो जवाब देते हैं? मुझे दिलचस्पी है!
breiti

@breiti नीचे मेरी aser देखें - serverfault.com/a/179136/17440
rahul286

3

बहुत धन्यवाद

request_terminate_timeout = 30

यह मेरे लिए पूरी तरह से काम करता है

लेकिन, मुझे इस फाइल में लाइन डालनी थी: "/etc/php5/fpm/pool.d/www.conf" जो "वर्कर सेक्शन" में कहना है।

PHP 5.3.21-1 - वर्डप्रेस 3.5.1

http://php-fpm.org/wiki/Configuration_File


मेरे पास उन कारकों का एक संयोजन था जो 502 त्रुटि का कारण बनते हैं जो आपके नुस्खा ने जादू की चाल में किया! आपका बहुत बहुत धन्यवाद!
जॉर्ज विसेंट मेंडोज़ा

2

मेरे मामले में (एक ही nginx त्रुटि संदेश), कुछ समस्याग्रस्त php स्क्रिप्ट निष्पादित करने और कुछ के लिए प्रतीक्षा करने के लिए समाप्त नहीं हो रही हैं, जिसके परिणामस्वरूप nginx को लेने के लिए और अधिक php5-fpm बच्चे नहीं हैं।

ठीक कर:

  1. निष्पादन समय सीमा जोड़ें अन्य ने इस पोस्ट का उल्लेख किया। request_terminate_timeout=30s
  2. बच्चों की संख्या बढ़ाएं। और सब कुछ एक आकर्षण की तरह काम करता था। pm.max_spare_servers=16 pm.min_spare_servers=2

अब सब कुछ एक आकर्षण की तरह काम करता था।


मेरी php स्क्रिप्ट में लंबे समय से बाहरी कनेक्शन का अनुरोध था। उन लंबे समय तक चलने वाले कार्यों को देखें और उनके लिए एक समय सीमा रखें।
अली नडालिज़ादेह

1

मुझे भी यही समस्या थी और मैंने अपाचे को पूरी तरह से हटाकर इसे हल किया:

yum remove httpd

उसके बाद मैंने पीएचपी और एनजीआईएनएक्स दोनों को बहाल करते हुए कहा:

/etc/init.d/nginx restart
/etc/init.d/php-fpm restart

1
हमारे पास तब हमारे सर्वर पर अपाचे नहीं थे। आपके मामले को जानकर खुशी होगी क्योंकि यह भविष्य में हमारी मदद कर सकता है।
rahul286

0

मेरे लिए एक ही समस्या सर्वर से rabbitmq को हटाने के बाद उत्पन्न हुई है। उपरोक्त में से कुछ भी उपयोगी नहीं था, सभी php5 मॉड्यूल को पुनर्स्थापित करने से समस्या हल हो गई। मैं उस सर्वर पर डेबियन 8.2 था। आशा है कि किसी के लिए उपयोगी होगा।


-1

इससे लोगों को भी मदद मिल सकती है:

इस बात पर निर्भर करता है कि आप अपने सेटअप को फास्टेगी कॉन्फ़िगरेशन के साथ-साथ php पर क्या देखना चाहिए ... मेरे मामले में (मैं apache2 + php5-fpm का उपयोग कर रहा हूं) और max_execution का समय भी इस बात पर निर्भर करता है कि फास्टैगी मॉड्यूल प्रतिक्रिया के लिए कितनी देर तक इंतजार करता है ( -निष्क्रिय समय) ...

http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html#FastCgiExternalServer


क्यों अपाचे 2 का उपयोग करें ?? मेरा मतलब है कि आप php5-fpm के साथ बातचीत करने के लिए सीधे nginx का उपयोग कर सकते हैं। जब अप्सरा हो तो अपाचे का उपयोग करने की आवश्यकता नहीं है!
rahul286

यदि आपके नगनेक्स का उपयोग कर रहे हैं, अगर अन्य नगनेक्स का उपयोग नहीं कर रहे हैं, तो उम्मीद है कि यह उनकी मदद करेगा। :-) ... मैं Apache2 + php5-fpm संबंधित प्रश्न के लिए खोज कर इस पृष्ठ पर आया था
farinspace

ठीक है। मुझे लगा कि आप PHP स्क्रिप्ट के लिए अपाचे के साथ Nginx का उपयोग कर रहे हैं जैसे कि कुछ पोपल ने अतीत में इसका इस्तेमाल किया था।
rahul286
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.