ホームページ  >  記事  >  バックエンド開発  >  PHP-FPMパラメータの理解

PHP-FPMパラメータの理解

王林
王林転載
2019-08-21 10:01:331666ブラウズ

process_control_timeout

英語の説明

process_control_timeout mixedTime limit for child processes to wait for a reaction on signals from master.
Available units: s(econds), m(inutes), h(ours), or d(ays) Default Unit: seconds. Default value: 0.

中国語の説明

process_control_timeout
 mixed
设置子进程接受主进程复用信号的超时时间。可用单位:s(秒),m(分),h(小时)或者 d(天)。默认单位:s(秒)。默认值:0(关闭)。

中国語の翻訳に不適切な箇所があります。英語の説明にはこの点は明記されていません信号は多重化された信号です。

私の理解:

リクエストの処理

原則として、php-fpm はアイドル状態の fastcgi プロセスを選択して処理します。リクエストを処理すると、php-fpm は fastcgi プロセスがリクエスト処理を受け入れる準備をするために fastcgi にシグナルを送信します。ただし、fastcgi プロセスは常にリクエストを処理できるわけではありません。つまり、シグナル (一時停止アニメーションなど) に常に応答できるわけではありません。このとき、php-fpm が fastcgi プロセスに残す時間を次のように設定する必要があります。タイムアウトになった場合、php -fpm は他の方法 (他の fastcgi プロセスを選択するなど) を考えますが、これが process_control_timeout パラメーターの役割です。

php-fpm実行reload

process_control_timeout = 10

<?php 
sleep(50);echo 1;sleep(20);    
//没有这个sleep,reload会立即生效echo 2;

ブラウザがアクセスしたときhttp://localhostphp-fpmsmoothingreload を実行します。fastcgi 信号がシャットダウン プロセス信号を受信した後、最初のスリープ関数は直接戻りますが、 2 番目のスリープはまだ実行中です。したがって、php-fpm はこの古い fastcgi プロセスによって 10 秒間停止しますが、その後、スムーズに再起動を完了できます。 php-fpm.conf

ファイル内の説明は次のとおりです:

; The timeout for serving a single request after which the worker process will
; be killed. This option should be used when the &#39;max_execution_time&#39; ini option
; does not stop script execution for some reason. A value of &#39;0&#39; means &#39;off&#39;.
; Available units: s(econds)(default), m(inutes), h(ours), or d(ays)
; Default Value: 0
;request_terminate_timeout = 0
翻訳は次のとおりです:

request_terminate_timeout

パラメータは、単一のリクエストを処理するためのタイムアウトを設定します。つまり、ワーカー プロセスは強制終了されます。このオプションは、php.ini ファイルの max_execution_time オプションによって何らかの理由でスクリプトの実行が停止されない場合に使用する必要があります。デフォルト値は 0 で、このオプションがオフであることを意味します。

上記のように、php.ini 設定の
request_terminate_timeout はリクエストのタイムアウトと max_execution_time を設定します。マニュアルの次の説明によると、スクリプト許容される最大実行時間です。

max_execution_time
 integer
这设置了脚本被解析器中止之前允许的最大执行时间,单位秒。 这有助于防止写得不好的脚本占尽服务器资源。 默认设置为 30。 从命令行运行 PHP 时,默认设置为 0。
最大执行时间不会影响系统调用和系统操作等。更多细节参见 set_time_limit()。
在 安全模式 下你不能通过 ini_set() 来修改此设置。 唯一的解决方法是关闭安全模式或者在 php.ini中修改时间限制。
你的 web 服务器也可以有其他超时设置,也有可能中断 PHP 的执行。 Apache 有一个 Timeout 指令,IIS 有一个 CGI 超时功能。 他们默认都是 300 秒。更多具体信息参见你的 web 服务器的文档。

違いは次のとおりです。 タイムアウト後、request_terminate_timeout

は 502Bad Gateway を返し、

max_execution_time はスローします。 # ##致命的な誤り###。

max_execution_time には、

system()sleep() の使用などのシステム コール、ストリーム操作、データベース操作などの時間は含まれません。これは比較的役に立ちませんが、request_terminate_timeout にはプログラムの完全なリクエスト時間が含まれます。 さらに、request_terminate_timeout をオンにしても max_execution_time は無効になりません。最初にタイムアウトに達した人が有効になります。

関連する PHP の問題の詳細については、PHP 中国語 Web サイトを参照してください:

https://www.php.cn/

以上がPHP-FPMパラメータの理解の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はPHPStudyで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。