ホームページ  >  記事  >  バックエンド開発  >  nginxのタイムアウト

nginxのタイムアウト

WBOY
WBOYオリジナル
2016-08-08 09:31:061113ブラウズ

最近、ウェブサイトがビッグデータを処理しているときに常に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 チュートリアルに興味のある友人に役立つことを願っています。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。