PHPメソッドの実行に時間がかかりすぎる問題を解決する方法

藏色散人
リリース: 2023-03-11 19:16:01
オリジナル
4990 人が閲覧しました

php メソッドの実行時間が長すぎる問題の解決策: 1. Nginx ゲートウェイのリクエスト タイムアウトを設定する; 2. PHP スクリプトの実行時間の上限を設定する。

PHPメソッドの実行に時間がかかりすぎる問題を解決する方法

この記事の動作環境: Windows7 システム、PHP7.1 バージョン、DELL G3 パソコン

php でエラーが発生する問題の解決方法メソッドの実行時間が長すぎますか?

PHP メソッドの実行時間が長すぎることが原因で発生する 502 Bad Gateway の解決策

バックグラウンド

最近問題が発生しました。PHP の一部があります。このコードには長時間の IO 操作が必要であり、この期間はリクエストが存在するスレッドをブロックし、リクエストがタイムアウトする原因となります。

これの何がそんなに難しいの? と思われるかもしれませんが、スレッドを開いて非同期で実行するだけで、ステータスを更新するだけで問題ありません。これは本当に良い解決策ですが、このコード セット全体が他の人のものであるのは残念です。コードを変更したい場合はビジネスに影響を与えるため、私の解決策は、コードをできるだけ変更せずにタイムアウトを設定することでこの問題を解決することです。

解決策

上記の問題から、タイムアウトは主に 2 つの要因の影響を受けます:

  • Nginx ゲートウェイ リクエストのタイムアウト設定

  • PHPスクリプト実行時間上限設定

順番に設定していきます。

Nginx ゲートウェイ リクエスト タイムアウト設定

Nginx は、非常に詳細なタイムアウト設定をサポートしています。主に使用されるものは次のとおりです。

keepalive_timeout
ログイン後にコピー

Nginx は KeepAlive_timeout を使用して KeepAlive のタイムアウトを指定します。各 TCP 接続を維持できる最大時間を指定します。 Nginx のデフォルト値は 75 秒ですが、ブラウザによっては最大 60 秒しか維持しないため、60 秒に設定できます。

fastcgi_connect_timeout
ログイン後にコピー

FastCGI サーバーとの接続を確立するためのタイムアウト。

fastcgi_send_timeout
ログイン後にコピー

FastCGI サーバーにリクエストを送信するときのタイムアウトを設定します。タイムアウトは、要求された転送全体ではなく、連続する 2 つの書き込み操作の間にのみ設定します。 FastCGI サーバーがこの時間内に何も受信しない場合、接続は閉じられます。

fastcgi_read_timeout
ログイン後にコピー

FastCGI サーバーからの応答の読み取りのタイムアウト。タイムアウトは、応答全体の転送ではなく、連続する 2 つの読み取り操作の間にのみ設定してください。 FastCGI サーバーがこの時間内に何も送信しない場合、接続は閉じられます。

PHP スクリプトの実行は、最後の 3 つの設定とより関連していると考えます。したがって、対応する Web サイトの Nginx 構成ファイルに設定を追加するだけです。

fastcgi_connect_timeout 600s;
fastcgi_send_timeout 600s;
fastcgi_read_timeout 600s;
ログイン後にコピー

PHP スクリプトの実行時間の上限設定

PHP スクリプトの実行時間は、主に 2 つの設定によって影響を受けます:

php.ini 中 max_execution_time 和 max_input_time
ログイン後にコピー

php.iniデフォルトの場所は /usr/local/php/etc/

php.ini 設定ファイル内のこれら 2 つの設定項目をタイムアウト期間の上限に変更します。

max_execution_time = 600
max_input_time = 600
php-fpm.conf 中 request_terminate_timeout
php-fpm.conf 的默认位置在 /usr/local/php/etc/
request_terminate_timeout 也设置为超时时间的上限。
request_terminate_timeout = 600
ログイン後にコピー

変更が完了したら、Nginx と php-fpm を再起動します。

service nginx reload
/etc/init.d/php-fpm reload
ログイン後にコピー

推奨学習: 「PHP ビデオ チュートリアル

以上がPHPメソッドの実行に時間がかかりすぎる問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
php
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!