Nginx + php-fpm Neredeyse sıfır yük ile “504 Ağ Geçidi Zaman Aşımı” hatası (test sunucusunda)


29

6 saat boyunca hata ayıklama sonra - Bu pes ediyorum:

LAN'da yaklaşık 100 wordpress ile bir nginx + php-fpm + mysql var (hepsi test wordpres kurulumunda çalışan farklı tasarımcılar / geliştiriciler tarafından yaratıldı ve kullanıldı)

Uzun zamandır herhangi bir sorun olmadan nginx kullanıyoruz.

Bugün, aniden - nginx, "504 Ağ Geçidi Zaman Aşımı" nı maviden döndürmeye başladı ...

Sanal bir ana bilgisayar için nginx hata günlüğünü kontrol ettim ...

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"

Php-fpm'yi 9000 numaralı bağlantı noktasında TCP moduyla çalıştırdığımda, "netstat | grep 9000" kullandım ve alışılmadık bir şey farkettim ... (Kolay okuma için buraya kısmi çıktı yapıştırma)

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             

Aşağıda vurgulandığı gibi bir sürü "CLOSE_WAIT" & "FIN_WAIT2" çifti vardır (yukarıdaki çıktıda):

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

Lütfen yukarıda 46680 numaralı bağlantı noktasını not edin.

MySQL yavaş sorgular hata günlüğünü etkinleştirdim, ancak işe yaramadı.

Şu an php5-fpm'yi her dakika bir cronjob (yeniden aşağıdaki komutu takip ederek) ile yeniden başlatmaya başladığımdan beri herşeyi "sorunsuz" tutuyor ama ben patchwork'den nefret ediyorum ve bunu çözmek istiyorum ...

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

Google’da kapsamlı bir şekilde arama yaptım - yardım almadım. Daha önce de belirtildiği gibi, bu LAN'daki bir test sunucusudur, CPU yükü asla 0.10'u geçmez ve bellek kullanımı da% 25'in altındadır (Sistem 2GB RAM ve ubuntu-server yüklü) Bu yüzden bana yardım etmek için kafa karıştırıcı olduğunu düşünüyorsanız, lütfen en az bir ipucu bırakın.

Yardımlarınız için şimdiden teşekkür ederiz.

-Rahul

(not - bu, - http://forum.nginx.org/read.php?11,127694 adresinin yeniden gönderilmesidir )

Güncelleme: Aşağıda yayınlanan cevabı buldum.

Yanıtlar:


31

Nginx forumunda ilanımın cevabını buldum - http://forum.nginx.org/read.php?2,127854

Cevap, benim durumumda ayarlamaktır:

request_terminate_timeout=30s

php-fpm config içinde (genellikle /etc/php5/fpm/php-fpm.conf)

Not, 30'ların dışındaki değerleri de kullanabilirsiniz.

Değerimi ana php.inidosyadaki eşleşmek için kullandım :

max_execution_time = 30

Herkese teşekkürler. :-)


5
Bu yapılandırma www.conf dosyasında da bulunabilir. Cevabınız için teşekkürler, bu hile yapmış gibi görünüyor.
eddiemoya

2
Bu bir havuz seviyesi yönergesidir, php-fpm.conf [global]bölümüne girmeye çalışırken bir hata mesajı alırsınız . Orada yalnızca havuzunuzu yapılandırırsanız da çalışır. Ayrıca: request_terminate_timeout docs .
Tanius

Bu GERÇEKTEN İHTİYACIM GEREKEN doğru cevap ise, o zaman bu Cuma 2015'in en iyisi olacak.
Philip

2
Ben koyarak bulundu request_terminate_timeout=30sbenim içine php-fpm.confdosyanın bir (111 Bağlantı Reddedildi) hataya neden. Dosyama taşıdığımda www.confçalıştı.
AJB

Php7 kullanırken, CentOS 7.2'de request_terminate_timeout bulunur: /etc/php-fpm.d/www.conf
nadavkav

16

İşte sorunumu nasıl çözdüm:

http://etc/nginx/nginx.conf dosyasında aşağıdaki değişiklikleri yapın

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

ve nginx'i yeniden başlatın

/etc/init.d/nginx restart


2
Evet, bu gerçekten soruyu soran kişinin sorduğu problemle ilgisi var gibi görünmüyor.
Umutsuz N00b

3
ama neyse ki ihtiyacım olan şey :)
luchaninov

Bu sorunumu çözmedi, ancak beni asıl meseleye götüren zaman aşımı mesajı yerine gerçek hatayı görmeme izin verdi.
Michael

4

Php 5.3 kullanıyorsanız, backlog'u artırın.

PHP 5.2 kullanıyorsanız, backlog boyutunu 128'den artırmak için yamayı destekleyin.

Ayrıca, bir TCP soketi yerine bir unix soketi kullanın. unix: /tmp/php5-cgi.sock (veya ilgili yol)


Özellikle unix soket kullanımına katılıyorum.
Matt

Cevap için karmawhore teşekkürler. Nginx posta listesinde bir çözüm buldum.
rahul286

@ rahul286 hangi cevap verdi? ilgileniyorum!
breiti

@breiti aşağıdaki cevabımı gör - serverfault.com/a/179136/17440
rahul286

3

Çok teşekkürler

request_terminate_timeout = 30 sn

Benim için mükemmel çalışıyor

ancak, bu dosyaya satırı eklemek zorunda kaldım: "/etc/php5/fpm/pool.d/www.conf" "İşçi Bölümünde".

PHP 5.3.21-1 - Wordpress 3.5.1

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


Sonunda 502 hatasına neden olan ve sihirbazlık tarifini yapan faktörlerin bir kombinasyonunu yaşadım! çok teşekkür ederim!
Jorge Vicente Mendoza

2

Benim durumumda (aynı nginx hata mesajı), bazı problemli php scriptleri bir şeyi yürütmek ve beklemekle bitmiyor, nginx'in daha fazla php5-fpm çocuğunu seçmesine neden olmuyor.

düzeltmek:

  1. Yürütme süresi eklemek ekledi, diğeri bu yazıda belirtti. request_terminate_timeout=30s
  2. çocuk sayısını yükseltmek. ve her şey bir cazibe gibi çalıştı. pm.max_spare_servers=16 pm.min_spare_servers=2

şimdi her şey bir cazibe gibi çalıştı.


PHP betiğimde uzun süredir çalışan bir dış bağlantı isteğim vardı. Uzun süren bu görevleri araştırın ve onlar için bir zaman aşımı süresine sahip olun.
Ali Nadalizadeh

1

Ben de aynı problemi yaşadım ve Apache'yi tamamen kaldırarak çözdüm:

yum remove httpd

Ondan sonra hem PHP'yi hem de NGINX'i yeniden başlatmayı tavsiye ediyorum:

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

1
O zaman sunucumuzda apache yoktu. Davanızı gelecekte bize yardımcı olabileceğinden haberdar olmaktan memnunum.
rahul286

0

Bana göre aynı sorun rabbitmq sunucusundan çıkarıldıktan sonra gerçekleşti. Yukarıdakilerin hiçbiri kullanışlı değildi, tüm php5 modüllerini yeniden yüklemek sorunu çözdü. Bu sunucuda Debian 8.2 vardı. Umut biri için yardımcı olacaktır.


-1

Bu aynı zamanda insanlara yardımcı olabilir:

Kurulumunuzun ne olduğuna bağlı olarak, benim durumumda (apache2 + php5-fpm kullanıyorum) fastcgi konfigürasyon paragraflarına ve php ... 'a bakmalısınız. boşa zaman aşımı) ...

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


neden apache2 kullanmalı ?? Php5-fpm ile etkileşime geçmek için doğrudan nginx kullanabilirsiniz. Nginx varken Apache kullanmanıza gerek yok!
rahul286

Eğer nginx kullanıyorsanız, diğerleri nginx kullanmıyorsa, umarım bu size yardımcı olacaktır. :-) ... Apache2 + php5-fpm ile ilgili bir soru ararken bu sayfaya rastladım
farinspace

tamam. Nginx'i Apache ile PHP komut dosyası için kullandığınızı sanmıştım.
rahul286
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.