Nginx + php-fpm “504 Gateway Time-out” error dengan muatan hampir nol (pada server uji)

29

Setelah debugging selama 6 jam - saya menyerah ini: |

Kami memiliki nginx + php-fpm + mysql di LAN dengan hampir 100 wordpress (dibuat dan digunakan oleh desainer / pengembang yang berbeda semua bekerja pada pengaturan test wordpres)

Kami menggunakan nginx tanpa masalah lama.

Hari ini, tiba-tiba - nginx mulai mengembalikan "504 Gateway Time-out" tiba-tiba ...

Saya memeriksa log kesalahan nginx untuk host virtual ...

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"

Ketika saya menjalankan php-fpm pada port 9000 melalui mode TCP, saya menjalankan "netstat | grep 9000" dan melihat sesuatu yang tidak biasa ... (Menempelkan sebagian keluaran di sini untuk kemudahan membaca)

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             

Ada banyak pasangan "CLOSE_WAIT" & "FIN_WAIT2" seperti yang disorot di bawah ini (dalam output di atas):

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

Harap perhatikan port 46680 di atas.

Saya mengaktifkan log kesalahan kueri mysql lambat, tetapi tidak berhasil.

Sampai sekarang me-restart php5-fpm setiap menit melalui cronjob (lihat perintah di bawah) menjaga semuanya berjalan "lancar" tapi saya benci patchwork dan ingin menyelesaikan ini ...

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

Saya mencari secara luas di Google - tidak mendapat bantuan. Seperti yang disebutkan, ini adalah server uji di LAN, beban CPU tidak pernah melewati 0,10 dan penggunaan memori juga di bawah 25% (Sistem memiliki 2GB RAM dan server ubuntu diinstal) Jadi jika Anda merasa bingung untuk membantu saya, silakan setidaknya memberikan petunjuk.

Terima kasih sebelumnya atas bantuannya.

-Rahul

(catatan - ini adalah pengeposan ulang - http://forum.nginx.org/read.php?11,127694 )

Pembaruan: Saya menemukan jawaban, yang diposting di bawah ini.

rahul286
sumber

Jawaban:

31

Saya menemukan jawaban pada postingan saya di forum nginx - http://forum.nginx.org/read.php?2,127854

Jawabannya, dalam kasus saya, adalah untuk mengatur:

request_terminate_timeout=30s

dalam konfigurasi php-fpm (biasanya /etc/php5/fpm/php-fpm.conf)

Catatan, Anda juga dapat menggunakan nilai selain 30-an.

Saya menggunakannya untuk mencocokkan nilai saya di php.inifile utama yaitu:

max_execution_time = 30

Terima kasih semuanya. :-)

rahul286
sumber
5
Konfigurasi ini juga dapat ditemukan dalam file www.conf. Terima kasih atas jawabannya, sepertinya ini berhasil.
eddiemoya
2
Ini adalah arahan pool-level, Anda akan mendapatkan pesan kesalahan ketika mencoba memasukkannya ke bagian php-fpm.conf [global]. Ini berfungsi hanya jika Anda juga memiliki kolam konfigurasi di sana. Juga: request_terminate_timeout docs .
tanius
Jika ini adalah jawaban yang benar yang SAYA BENAR BUTUHKAN maka Jumat ini akan menjadi yang terbaik di tahun 2015.
Philip
2
Saya menemukan bahwa memasukkan request_terminate_timeout=30ske dalam php-fpm.conffile saya menyebabkan kesalahan (111 Koneksi Ditolak). Ketika saya memindahkannya ke www.conffile saya itu berhasil.
AJB
Pada CentOS 7.2 saat menggunakan php7, request_terminate_timeout terletak di:
/etc/php-fpm.d/www.conf
16

Di sini cara mengatasi masalah saya:

buat perubahan berikut ke /etc/nginx/nginx.conf di http {bagian

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

dan kemudian restart nginx

/etc/init.d/nginx restart

Vijay Kumar
sumber
2
Ya, itu benar-benar tidak ada hubungannya dengan masalah orang yang mengajukan pertanyaan.
HopelessN00b
3
tapi untungnya itu yang saya butuhkan :)
luchaninov
Ini tidak memperbaiki masalah saya, tetapi memungkinkan saya untuk melihat kesalahan yang sebenarnya, bukan pesan batas waktu, yang membawa saya ke masalah yang sebenarnya.
Michael
4

Jika Anda menggunakan php 5.3, tambah backlog.

Jika Anda menggunakan php 5.2, backport patch untuk menambah ukuran backlog dari 128.

Juga, gunakan soket unix daripada soket TCP. unix: /tmp/php5-cgi.sock (atau jalur yang relevan)

karmawhore
sumber
Saya harus setuju, terutama dengan penggunaan soket unix.
Matt
Terima kasih karmawhore untuk jawabannya. Saya menemukan solusi pada milis nginx.
rahul286
@ rahul286 yang menjawab? saya tertarik!
breiti
@breiti lihat anser saya di bawah ini - serverfault.com/a/179136/17440
rahul286
3

Terima kasih banyak

request_terminate_timeout = 30s

Ini bekerja dengan baik untuk saya

tetapi, saya harus menyisipkan baris dalam file ini: "/etc/php5/fpm/pool.d/www.conf" yang bisa dikatakan di "Bagian Pekerja".

PHP 5.3.21-1 - Wordpress 3.5.1

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

Franck
sumber
Saya memiliki kombinasi faktor yang akhirnya menyebabkan kesalahan 502 resep Anda melakukan trik sulap! Terima kasih banyak!
Jorge Vicente Mendoza
2

dalam kasus saya (pesan kesalahan nginx yang sama), beberapa skrip php bermasalah tidak berakhir untuk mengeksekusi dan menunggu sesuatu, sehingga tidak ada lagi anak-anak php5-fpm untuk dipilih nginx.

memperbaiki:

  1. tambahkan batas waktu eksekusi lain yang disebutkan ini posting ini. request_terminate_timeout=30s
  2. meningkatkan jumlah anak. dan semuanya bekerja seperti pesona. pm.max_spare_servers=16 pm.min_spare_servers=2

sekarang semuanya bekerja seperti pesona.

c2h2
sumber
Saya memiliki permintaan koneksi eksternal yang berjalan lama di skrip php saya. Carilah tugas-tugas jangka panjang itu dan beri batas waktu untuknya.
Ali Nadalizadeh
1

Saya memiliki masalah yang sama dan saya menyelesaikannya dengan sepenuhnya menghapus Apache:

yum remove httpd

Setelah itu saya merekomendasikan untuk memulihkan PHP dan NGINX:

/etc/init.d/nginx restart
/etc/init.d/php-fpm restart
Nikolay
sumber
1
Kami tidak memiliki apache di server kami. Senang mengetahui kasus Anda karena dapat membantu kami di masa depan.
rahul286
0

Bagi saya masalah yang sama terjadi setelah menghapus rabbitmq dari server. Tidak ada satu pun di atas yang tidak berguna, menginstal ulang semua modul php5 memecahkan masalah. Saya memiliki Debian 8.2 di server itu. Semoga bermanfaat bagi seseorang.

Taggart Comet
sumber
-1

Ini juga dapat membantu orang-orang:

Tergantung pada apa pengaturan Anda, Anda harus melihat params konfigurasi fastcgi dan juga php ... dalam kasus saya (saya menggunakan apache2 + php5-fpm) dan waktu max_execution juga tergantung pada berapa lama modul fastcgi menunggu respon ( -idle-timeout) ...

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

farinspace
sumber
mengapa menggunakan apache2 ?? Maksud saya, Anda dapat menggunakan nginx secara langsung untuk berinteraksi dengan php5-fpm. Tidak perlu menggunakan Apache ketika Anda memiliki nginx!
rahul286
Jika Anda menggunakan nginx, jika orang lain TIDAK menggunakan nginx mudah-mudahan ini akan membantu mereka. :-) ... Saya menemukan halaman ini mencari pertanyaan terkait Apache2 + php5-fpm
farinspace
baik. Saya pikir Anda menggunakan Nginx dengan Apache untuk skrip PHP seperti beberapa orang yang menggunakannya di masa lalu.
rahul286