Nginx + php-fpm phiên bản 504 Lỗi hết thời gian chờ của Gateway với tải gần như bằng không (trên máy chủ thử nghiệm)


29

Sau khi gỡ lỗi trong 6 giờ - tôi sẽ từ bỏ điều này: |

Chúng tôi có một nginx + php-fpm + mysql trong LAN với gần 100 wordpress (được tạo và sử dụng bởi các nhà thiết kế / nhà phát triển khác nhau, tất cả đều làm việc trên thiết lập wordpres thử nghiệm)

Chúng tôi đang sử dụng nginx mà không có bất kỳ vấn đề nào từ lâu.

Hôm nay, thật bất ngờ - nginx bắt đầu trả lại "504 Gateway Hết giờ" ngoài màu xanh ...

Tôi đã kiểm tra nhật ký lỗi nginx cho một máy chủ ảo ...

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"

Khi tôi chạy php-fpm trên cổng 9000 qua chế độ TCP, tôi đã chạy "netstat | grep 9000" và nhận thấy điều gì đó bất thường ... (Dán đầu ra một phần ở đây để dễ đọc)

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             

Có rất nhiều cặp "CLOSE_WAIT" & "FIN_WAIT2" như được tô sáng bên dưới (ở đầu ra ở trên):

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

Xin lưu ý cổng 46680 ở trên.

Tôi đã kích hoạt nhật ký lỗi truy vấn chậm mysql nhưng nó không hoạt động.

Kể từ bây giờ, khởi động lại php5-fpm mỗi phút thông qua một cronjob (xem lệnh bên dưới) để mọi thứ hoạt động "trơn tru" nhưng tôi ghét chắp vá và muốn giải quyết điều này ...

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

Tôi đã tìm kiếm rộng rãi trên Google - không có sự giúp đỡ. Như đã đề cập, đây là máy chủ thử nghiệm trong mạng LAN, tải CPU không bao giờ vượt quá 0.10 và mức sử dụng bộ nhớ cũng dưới 25% (Hệ thống có RAM 2GB và máy chủ Ubuntu được cài đặt) Vì vậy, nếu bạn thấy khó hiểu thì hãy giúp tôi ít nhất thả một gợi ý.

Cảm ơn trước sự giúp đỡ.

-Rahul

(lưu ý - đây là đăng lại của - http://forum.nginx.org/read.php?11,127694 )

Cập nhật: Tôi tìm thấy câu trả lời, được đăng dưới đây.

Câu trả lời:


31

Tôi tìm thấy câu trả lời trên bài đăng của mình trên diễn đàn nginx - http://forum.nginx.org/read.php?2,127854

Câu trả lời, trong trường hợp của tôi, là đặt:

request_terminate_timeout=30s

trong cấu hình php-fpm (thường /etc/php5/fpm/php-fpm.conf)

Lưu ý, bạn cũng có thể sử dụng các giá trị khác ngoài 30 giây.

Tôi đã sử dụng nó để khớp với giá trị của tôi trong php.initệp chính đó là:

max_execution_time = 30

Cảm ơn tất cả. :-)


5
Cấu hình này cũng có thể được tìm thấy trong tập tin www.conf. Cảm ơn câu trả lời mặc dù, điều này dường như đã thực hiện các mẹo.
eddiemoya

2
Đây là một chỉ thị cấp độ nhóm, bạn sẽ nhận được thông báo lỗi khi cố gắng đưa nó vào phần của php-fpm.conf [global]. Nó chỉ hoạt động ở đó nếu bạn cũng có cấu hình pool của bạn trong đó. Ngoài ra: tài liệu request_terminate_timeout .
tanius

Nếu đây là câu trả lời chính xác mà tôi THỰC SỰ THẬT thì thứ Sáu này sẽ là câu trả lời hay nhất năm 2015.
Philip

2
Tôi thấy rằng việc đưa request_terminate_timeout=30svào php-fpm.conftệp của mình gây ra lỗi (111 Từ chối kết nối). Khi tôi chuyển nó vào www.conftập tin của mình, nó đã hoạt động.
AJB

Trên CentOS 7.2 khi sử dụng php7, request_terminate_timeout được đặt tại: /etc/php-fpm.d/www.conf
nadavkav

16

Đây là cách nó giải quyết vấn đề của tôi:

thực hiện các thay đổi sau đây cho /etc/nginx/nginx.conf trong http {phần

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

và sau đó khởi động lại nginx

/etc/init.d/nginx khởi động lại


2
Vâng, điều đó thực sự không giống như nó có liên quan đến vấn đề mà người hỏi đặt ra.
HoplessN00b

3
nhưng may mắn thay, đó là những gì tôi cần :)
luchaninov

Điều này không khắc phục được sự cố của tôi, nhưng nó cho phép tôi thấy lỗi thực tế thay vì thông báo hết thời gian, điều này dẫn tôi đến vấn đề thực tế.
Michael

4

Nếu bạn đang sử dụng php 5.3, hãy tăng số lượng tồn đọng.

Nếu bạn đang sử dụng php 5.2, hãy backport patch để tăng kích thước backlog từ 128.

Ngoài ra, sử dụng ổ cắm unix thay vì ổ cắm TCP. unix: /tmp/php5-cgi.sock (hoặc đường dẫn có liên quan)


Tôi phải đồng ý, đặc biệt là với việc sử dụng ổ cắm unix.
Matt

Cảm ơn karmawhore đã trả lời. Tôi tìm thấy một giải pháp trong danh sách gửi thư nginx.
rahul286

@ rahul286 mà trả lời? tôi quan tâm
breiti

@oustiti thấy anser của tôi bên dưới - serverfault.com/a/179136/17440
rahul286

3

Cảm ơn rất nhiều

request_terminate_timeout = 30s

Nó hoạt động hoàn hảo cho tôi

nhưng, tôi đã phải chèn dòng trong tệp này: "/etc/php5/fpm/pool.d/www.conf" nghĩa là trong phần "Công nhân".

PHP 5.3.21-1 - Wordpress 3.5.1

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


Tôi đã có sự kết hợp của các yếu tố gây ra lỗi 502, công thức của bạn đã thực hiện trò ảo thuật! cảm ơn bạn rất nhiều!
Jorge Vicente Mendoza

2

trong trường hợp của tôi (cùng một thông báo lỗi nginx), một số tập lệnh php có vấn đề sẽ không kết thúc để thực thi và chờ đợi một cái gì đó, dẫn đến không có con php5-fpm nào cho nginx chọn.

sửa chữa:

  1. thêm giới hạn thời gian thực hiện khác đề cập đến nó bài này. request_terminate_timeout=30s
  2. nuôi con số. và mọi thứ hoạt động như một lá bùa. pm.max_spare_servers=16 pm.min_spare_servers=2

bây giờ mọi thứ làm việc như một lá bùa.


Tôi đã có một yêu cầu kết nối bên ngoài chạy dài trong tập lệnh php của tôi. Tìm kiếm những nhiệm vụ chạy dài và đặt thời gian chờ cho chúng.
Ali Nadalizadeh

1

Tôi đã có cùng một vấn đề và tôi đã giải quyết nó bằng cách loại bỏ hoàn toàn Apache:

yum remove httpd

Sau đó, tôi khuyên bạn nên khôi phục cả PHP và NGINX:

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

1
Chúng tôi không có apache trên máy chủ của chúng tôi sau đó. Vui mừng khi biết trường hợp của bạn vì nó có thể giúp chúng tôi trong tương lai.
rahul286

0

Đối với tôi, vấn đề tương tự đã xảy ra sau khi gỡ bỏ rabbitmq khỏi máy chủ. Không có gì ở trên không hữu ích, cài đặt lại tất cả các mô-đun php5 đã giải quyết vấn đề. Tôi đã có Debian 8.2 trên máy chủ đó. Hy vọng sẽ hữu ích cho một ai đó.


-1

Điều này cũng có thể giúp mọi người:

Tùy thuộc vào thiết lập của bạn là gì, bạn nên xem các thông số cấu hình fastcgi cũng như php ... trong trường hợp của tôi (tôi đang sử dụng apache2 + php5-fpm) và thời gian max_execut cũng phụ thuộc vào thời gian mô-đun fastcgi chờ phản hồi ( thời gian chờ) ...

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


Tại sao nên sử dụng apache2 ?? Ý tôi là bạn có thể sử dụng nginx trực tiếp để tương tác với php5-fpm. Không cần sử dụng Apache khi bạn có nginx!
rahul286

Nếu bạn sử dụng nginx, nếu người khác KHÔNG sử dụng nginx thì hy vọng điều này sẽ giúp họ thoát ra. :-) ... Tôi đã xem qua trang này để tìm kiếm câu hỏi liên quan đến Apache2 + php5-fpm
farinspace

được. Tôi nghĩ rằng bạn đang sử dụng Nginx với Apache cho các tập lệnh PHP giống như một số pople đã sử dụng nó trong quá khứ.
rahul286
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.