最近、ウェブサイトがビッグデータを処理しているときに常に504 Gateway Time-outが表示されるため、インターネットでいくつかの情報を見つけました
Nginx 502 Bad Gatewayは、要求されたPHP-CGIが実行されたことを意味しますが、何らかの理由により(一般に、リソースの読み取りの問題です) が完了しておらず、PHP-CGI プロセスが終了する原因となっていました。
Nginx 504 Gateway Time-out とは、要求されたゲートウェイが要求されていないことを意味します。簡単に言えば、実行可能な PHP-CGI が要求されていないことを意味します。
これら 2 つの問題を解決するには、実際には包括的な思考が必要です。一般的に、Nginx 502 Bad Gateway は php-fpm.conf の設定に関連しており、Nginx 504 Gateway Time-out は nginx.conf の設定に関連しています。
正しい設定には、サーバー自体のパフォーマンスや訪問者数などの複数の要素を考慮する必要があります。
現在のサーバーを例に挙げると、CPU は Pen4 1.5G、メモリは 1GB、CENTOS システムです。同時に約 50 人の訪問者がオンラインにいます。
しかし、オンラインのほとんどの人は多くの情報処理のためにPHP-CGIをリクエストする必要があるため、nginx.confを次のように設定しました:
fastcgi_connect_timeout 300s;
fastcgi_send_timeout 300s;
fastcgi_read_timeout 300s;
fastcgi _buffer_size 128k;
fastcgi_buffers 8 128k; #8 128
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k; gi_connect_timeout 300s;
fastcgi_send_timeout 300s;
fastcgi_read_timeout 3 00s;
これは、PHP-CGI の接続、送信、読み取りにかかる時間は 300 秒で十分であると規定しています。 , そのため、私のサーバーではエラー 504 ゲートウェイ タイムアウトが発生することはほとんどありません。最も重要なのは php-fpm.conf の設定で、これは 502 Bad Gateway および 504 Gateway Time-out に直接つながります。
それでは、php-fpm.conf のいくつかの重要なパラメータを注意深く分析してみましょう:
php-fpm.conf には 2 つの重要なパラメータがあります。1 つは「max_children」、もう 1 つは「request_terminate_timeout」です
I 2 つの値設定は「40」と「900」ですが、この値は普遍的なものではないため、自分で計算する必要があります。
計算方法は次のとおりです:
サーバーのパフォーマンスが十分に高く、ブロードバンドリソースが十分で、PHPスクリプトにループやバグがない場合は、「request_terminate_timeout」を直接0秒に設定できます。 0 の意味は、PHP-CGI を時間制限なく実行し続けることを意味します。これができない場合、つまり、PHP-CGI にバグがあるか、帯域幅が不十分であるか、またはその他の理由で PHP-CGI が一時停止されている可能性がある場合は、次のことをお勧めします。 assign "request_terminate_timeout" サーバーのパフォーマンスに基づいて設定できる値。一般に、パフォーマンスが良いほど高く設定でき、20 分から 30 分で問題ありません。サーバーの PHP スクリプトは長時間実行する必要があるため、10 分以上かかる場合もあるので、PHP-CGI が停止して 502 が表示されないように 900 秒に設定しました。 不正なゲートウェイ エラー。
そして、「max_children」の値はどのように計算されるのでしょうか? 原則として、値が大きいほど、php-cgi プロセスが速く処理され、キューに入れられるリクエストが少なくなります。 「max_children」の設定もサーバーのパフォーマンスに応じて設定する必要があります。一般的に、サーバー上の各 php-cgi が消費するメモリは通常の状況で約 20M であるため、「max_children」を 40, 20M* に設定します。 40=800M は、ピーク時にすべての PHP-CGI によって消費されるメモリが 800M 以内であることを意味します。これは、私の有効メモリより 1Gb 少ないです。また、「max_children」が 5 ~ 10 などの小さい値に設定されている場合、php-cgi は「非常に疲れて」、処理速度が非常に遅くなります。 それも長く。リクエストが長期間処理されなかった場合、エラー 504 ゲートウェイ タイムアウトが表示されます。処理中の php-cgi で問題が発生した場合、エラー 502 ゲートウェイが無効です。
fastcgi_read_timeout 300秒;
上記では、nginx タイムアウトについての側面も含めて紹介していますが、PHP チュートリアルに興味のある友人に役立つことを願っています。