今日、プログラムが Excel エクスポート タスクを実行しているときに、nginx タイムアウト メッセージが表示されました。
nginx 504 Gateway Time-out
トラブルシューティング プロセス:
タスクを表示すると、内容が 20,000 個の情報のデータ量であることがわかりました。 、各情報には 50 がありました この問題は、フィールドが Excel にエクスポートされたときに発生しました
タイムアウトが発生するまでの実行時間は約 10 分でした
分析:
Nginx 504 ゲートウェイ タイムアウトは、要求されたゲートウェイが要求されていないことを意味します簡単に言うと、実行できる PHP-CGI のリクエストがないことを意味します。 通常、次のような状況でこの問題が発生します。
1. プログラムが大量のデータを処理している、または無限大などの問題が発生しているループ
2. 何らかの理由で接続できず、タイムアウト障害に対するメカニズムがないため、常に接続が作成されるため、データベースなどの接続を作成します
3. プログラム内にいくつかの http リクエストがあります。これらのリクエストの実行時間が長すぎるため、タイムアウトが発生します
<span>#修改Nginx配置: fastcgi_connect_timeout 1200s;#原设置为300s fastcgi_send_timeout 1200s;<span>#原设置为300s</span>fastcgi_read_timeout 1200s;<span>#原设置为300s</span>fastcgi_buffer_size 64k; fastcgi_buffers </span><span>4</span><span> 64k; fastcgi_busy_buffers_size 128k; fastcgi_temp_file_write_size 256k;</span>
<span>fastcgi_connect_timeout #同 FastCGI 服务器的连接超时时间,默认值60秒,它不能超过75秒;<br>fastcgi_send_timeout #Nginx 进程向 FastCGI 进程发送 request ,整个过程的超时时间,默认值60秒;<br>fastcgi_read_timeout #FastCGI 进程向 Nginx 进程发送 response ,整个过程的超时时间,默认值60秒;<br></span>
<span>php.ini<br></span><span>max_execution_time = 300s;PHP 脚本的最大执行时间,但是,在 php-cgi(php-fpm) 中,该参数不会起效。<br>php-fpm<br>request_terminate_timeout = 0; #设置单个请求的超时中止时间.设置为0 即一直执行下去直到程序结束 不会超时 </span>
set_time_limit
Baiduでphp関数の実行時間を検索したところ、次のことが見つかりました: set_time_limitこの機能は、このページの最大実行時間を設定するために使用されます。デフォルト値は 30 秒で、php.ini の max_execution_time 変数で設定されています。0 に設定されている場合、最大時間は制限されません。 この関数を実行すると計算が開始されます。たとえば、デフォルトが 30 秒で、この関数が実行される前に 25 秒が実行されており、この関数を使用してそれを 20 秒に変更すると、ページの最大実行時間は 45 秒になります。 最後に、php 関数に次の行を追加しました: set_time_limit(0); もう一度実行すると、結果は OK です。以上、504ゲートウェイタイムアウトの内容も含めてnginx 504ゲートウェイタイムアウトについて紹介しましたが、PHPチュートリアルに興味のある友人の参考になれば幸いです。