#php-fpm ワークフロー
php-fpmフルネームは PHP FastCGI Process Manager です。php-fpm が開始されると、最初に php.ini が読み取られ、次に対応する conf 設定ファイルが読み取られます。conf 設定は php.ini 設定をオーバーライドできます。 php-fpm を開始すると、ポート 9000 をリッスンするマスター プロセスが作成されます (構成可能)。マスター プロセスは、fpm.conf/www.conf に基づいていくつかのサブプロセスを作成します。実際のビジネスを処理するために使用されます。 クライアント (nginx など) がポート 9000 に接続すると、アイドル状態の子プロセスがそれ自体を受け入れます。すべての子プロセスがビジー状態の場合、受け入れられる新しい接続は、 master. , fpm サブプロセスがアイドルになるのを待っています; 受け入れられるセミ接続を格納するキューの長さは、listen.backlog によって構成されます。関連学習の推奨事項:設定内のすべての相対パスは、php パスのインストールを基準としています。 。 php-fpm.conf 構成ファイルに加えて、通常、プロセス プールおよびさまざまなプロセスを構成するための他の *.conf 構成ファイル (または、php-fpm.conf で直接構成) があります。異なるユーザーによって実行され、異なるポートをリッスンし、異なるタスクを処理することができ、複数のプロセス プールがグローバル構成を共有します。 include=/opt/remi/php56/root/etc/php-fpm.d/*.conf 他の設定ファイルをロードします。 php-fpm グローバル設定パラメータの中国語の説明:php プログラミング (ビデオ)
pid = /opt/remi/php56/root/var/run/php-fpm/php-fpm.pid#pid プロセス ファイル、デフォルトはなしです。
error_log = /opt/remi/php56/root/var/log/php-fpm/error.log#エラー ログの場所、デフォルト: インストール パス #INSTALL_PREFIX#/log/php-fpm。ログ。 syslog に設定すると、ログはファイルに書き込まれずに syslogd サービスに送信されます。
syslog.facility = daemon#ログをシステム ログに書き込みます。Linux はまだ十分に慣れていないため、今は無視してください。
syslog.ident = php-fpm#システム ログ識別子。複数の fpm プロセスが実行されている場合、これを使用して、どのログに属しているかを区別する必要があります。
log_level = Notice#ログ レベル、デフォルトの通知、オプション: アラート、エラー、警告、通知、デバッグ
emergency_restart_threshold = 60#次のEmergency_restart_intervalパラメータを使用します
emergency_restart_interval = 60s#SIGSEGV または SIGBUS を持つ子プロセスの数が、このパラメータで設定された時間内に、emergency_restart_threshold パラメータで設定された値を超えた場合、fpm は正常に再起動します。値 0 は、これをオフにすることを意味します関数。使用可能な単位は、s 秒、m 分、h 時間、d 日です。
process_control_timeout = 0#子プロセスがメインプロセスの多重化信号を受け入れるためのタイムアウトを設定します。日々わかっているのですが、この期間を過ぎると再利用は出来ないのでしょうか?
process.max = 128#子プロセスを動的に管理する場合、fpm は最も多くのプロセスをフォークできます。0 は制限なしを意味します。これは、すべてのプロセスによって開始できる子プロセスの合計数です。プールの場合は注意して使用してください。
process.priority = -19# 子プロセスの優先順位を設定します。これは、マスター プロセスが root ユーザーとして開始された場合に有効です。設定されていない場合、子プロセスはその優先順位を継承します。値の範囲は - 19 (最高) ~ 20 (最低) で、デフォルトでは設定されません。
daemonize = yes#バグをデバッグするには no に設定します。デフォルトは yes です。
rlimit_files = 1024#マスター プロセスが開くことができるファイルの最大数を設定します。デフォルトはシステム値です。
rlimit_core = 0#マスター プロセス コアの rlimit 制限値。オプションで無制限または 0 以上の整数、デフォルトはシステム値です。
events.mechanism = epoll#イベント処理メカニズム、デフォルトで自動検出、オプションの値: select、poll、epoll (linux>=2.5.44)、kqueue、/dev/poll、port
systemd_interval = 10s#システムサービスとして fpm が設定されている場合、ステータスをサーバーに報告する頻度。単位は s、m、h です。
php-fpm プロセス プール構成プールの定義:
さまざまなリスニング ポートやさまざまな管理オプションで何でも実行できます。プールの数に制限はありません。プールの名前はログと統計に使用されます。user = apachegroup = apache#どのユーザーとグループの権限でプール fpm を実行します。 httpd サービスなどの特定のディレクトリにアクセスするには、Apache を使用します。listen = 127.0.0.1:9000#リスニング IP とポートは、/path/to/unix/socket にすることができます。 UNIX を監視するにはソケットの場合、パフォーマンスが向上します。
listen.backlog = 65535#受け入れられないソケット キューのサイズ。FreeBSD および OpenBSD では -1、他のプラットフォームではデフォルトは 65535 です。同時実行性が高い場合に重要です。適切な設定によりキューに入れられたリクエストが処理されます。会議のバックログが多すぎるため、処理後、nginx はタイムアウトを待って fpm とのソケット接続を切断しますが、これは失敗します。 -1 は使用しないでください。1024 以上、できれば 2 の累乗にすることをお勧めします。
#プールはバックログ キューを共有し、すべてのプール プロセスはこのキューに移動して接続を受け入れます。#最大数はシステム構成 cat /proc/sys/net/core/somaxconn によって制限されます。システム構成の変更: vim /etc/sysctl.conf、net.core.somaxconn = 2000 を追加、最大値は 2000 です。 、次に php バックログの最大値は 2000 です。
#listen.owner = apachelisten.group = apache#listen.mode = 0660
#ソケット接続方式を使用する場合は、unix を指定します。ソケット アクセス許可を持つユーザーは、デフォルトでは実行中のユーザーと同じです。TCP 接続を使用する場合は、コメントアウトできます
listen.allowed_clients = 127.0.0.1
#接続を許可するアドレスを設定しますfpm など、nginx は複数のアドレスをカンマで区切って接続します。設定されていない場合は、デフォルトで任意のアドレスに接続できます。#プール プロセスの権限では、マスター プロセスが root ユーザーであることも必要です。これはグローバル プロセスと同じです。設定されていない場合、プール プロセスの優先度はマスタープロセスは継承されます。
process.priority = -19# 起動時の子プロセス管理方法、オプション値: static(起動時に指定数作成)、dynamic(起動時に状況に応じて1つ以上作成)、ondemand(起動時)子プロセスは現時点では作成されず、必要な場合にのみ作成されます)
pm = Dynamic#このプールには同時に最大 5 つのプロセスを含めることができ、3 つの管理メソッドすべてを使用できます。構成する必要があります
pm.max_children = 5#fpm の開始時に 2 つの子プロセスを作成します (動的な動的管理メソッドにのみ適用されます)
pm.start_servers = 2#少なくともサーバーがアイドル状態の場合、2 つの子プロセスが維持されます。この数が十分でない場合は作成されます。動的動的管理メソッドにのみ適用されます。
pm.min_spare_servers = 2#最大で 2 つの子プロセスが必要です。アイドル状態のサーバーは少数ですが、多すぎる場合は強制終了されます。動的動的管理メソッドにのみ適用されます。
pm.max_spare_servers = 3#子プロセスはアイドル状態になった後に強制終了されます。 10秒間。
pm .process_idle_timeout = 10s#各子プロセスは、最大 500 件のリクエストを処理した後にリサイクルされるため、メモリ リークを防ぐことができます。
pm.max_requests = 500
pm.status_path string#FPM ステータス ページの URL。設定されていない場合、ステータス ページにアクセスできません。デフォルト: なし。
ping.path string
#FPM 監視ページの ping URL。設定されていない場合、ping ページにアクセスできません。このページは、FPM が稼働中であり、要求に応答できるかどうかを外部から検出するために使用されます。スラッシュ (/) で始める必要があることに注意してください。
ping.response string
#ping リクエストの返信応答を定義するために使用されます。テキスト/プレーン形式のテキストを HTTP 200 として返します。デフォルト値: ポン。#ワーカーの nice(2) 優先度を設定します (設定されている場合)。値の範囲は、-19 (最高の優先順位) から 20 (低い優先順位) です。デフォルト値: 設定しない
process.priority int#パス検出時に使用されるプレフィックス
prefix string#Accessたとえば、 yii2 は、index.php へのアクセスを毎回記録しますが、実際の PHP ファイルのみを記録します。
access.log = var/log/$pool.access.log#遅すぎる PHP ファイル実行のログには、コードのどの行が遅すぎるかが正確に記録されます。これは、有効になります。
slowlog = var/log/$pool.log.slow#この実行時間を超過するとスローログが書き込まれます
request_slowlog_timeout = 2s#単一リクエストのタイムアウト (場合によっては、によって設定された最大実行時間) php.ini 時間が有効になっていない場合は、実行に時間がかかりすぎたリクエストが強制終了されます。
request_terminate_timeout = 3s#開いているハンドルの最大数。デフォルトはシステム値です。
rlimit_files = 1024#使用されるコアの最大数。デフォルトはシステム割り当てです。
rlimit_core = 0#パスは絶対パスである必要があります。子プロセスのディレクトリを変更すると、プロセスによるファイル システムの読み取りと書き込みが、実際のオペレーティング システムのファイル システムから分離される可能性があります。セキュリティに良い。
chroot = /path
chdir = /var/www#現在の作業ディレクトリを変更します。相対パスを使用できます。デフォルトは現在のディレクトリまたは chroot です。
catch_workers_output = yes
#標準出力 stdout と標準エラー stderr をメイン エラー ログにリダイレクトします。設定されていない場合、これら 2 つのログは /dev/null に送信されます。高負荷条件下では、この構成はページが数ミリ秒遅延するため、デフォルトでは有効になっていません。#ワークプロセスの作成時に環境変数をクリアするかどうか。「はい」の場合、子プロセス getenv() は $_ENV および $_SERVER にアクセスできなくなります。
clear_env = no#セキュリティのため、実行できるスクリプトのサフィックスを制限します
security.limit_extensions = .php .php3 .php4 .php5
#現在のプールの追加の php.ini 構成を指定しますなど、現在のプールのエラー ログが書き込まれる場所を指定します。php_value/php_flag
#php.ini の内容は、ini_set#これは上記と同じですが、ini_set によって上書きされません。
php_admin_value/ によって設定およびオーバーライドできます。 php_admin_flag
#フラグが設定されている場合、値は on、off、1、0、true、false、yes または no のみです。他のタイプの値には value を使用する必要があります。php_flag[表示エラー] = オフ
php_admin_value[エラーログ] = /var/log/fpm-php.www.log
php_admin_flag[ログエラー] = オン
php_admin_value[メモリ制限] = 32M
#このメソッドで `disable_functions` と `disable_classes` を設定すると、php.ini の設定は上書きされず、追加されるだけになります。
注: PHP 設定値は php_value または php_flag を通じて設定され、以前の値は上書きされます。
Disable_functions または disable_classes php.ini で定義された値は上書きされませんが、新しい設定は元の値に追加されます。
php_admin_value または php_admin_flag を使用して定義された値は、PHP コードの ini_set() によってオーバーライドできません。
5.3.3 以降、PHP 設定は Web サーバー経由でも設定できるようになりました。
nginx は unixsock 経由で php-fpm と通信します:
該当するシナリオ: nginx と php-fpm は同じサーバー上にあります。この場合、unixsocket のプロセス間通信TCP ポート通信を使用せずに直接使用できるため、接続を作成する時間を節約でき、パフォーマンスが向上します。
1. php-fpm の listen を /opt/remi/php56/root/var/run/php-fpm/php567-fpm.sock (相対パスを使用できます) に設定し、fpm を再起動します。 php567-fpm.sock ファイルが自動的に作成されます
2. nginx の fastcgi_pass パラメータを unix:/opt/remi/php56/root/var/run/php-fpm/php567-fpm に変更します。 sock; through php567 - fpm と通信するには、fpm.sock ファイルで nginx が php567-fpm.sock ファイルにアクセスする権限を持っていることを確認する必要があります。
概要:
fpm がそのディレクトリにファイルを書き込む権限を持ち、nginx がそれを読み取る権限を持っている限り、sock ファイルはどこにでも作成できます。 TCP プロトコルはデータの正確性を保証するため、TCP 接続はより安定しますが、sock ではデータのコピーとコンテキストの切り替えが少なく、消費するリソースも少なくなります。ただし、sock は nginx と fpm が同じマシン上にある場合にのみ使用できます。
#php-fpm プロセス ステータスの監視
1. nginx 設定: ステータス リクエストが発生した場合、それを php# に直接転送します。
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
}
2. Fpm 設定: pm.status_path = /status
3. 次に、fpm と nginx を再起動し、ブラウザでアクセスして次を確認します。
結果はデフォルトで text/plain で表示されます。パラメータ ?json/html/xml を渡すと、それぞれ json 形式とその他の形式で結果を取得できます。パラメータ full を使用すると表示できます各サブプロセスの詳細
pool プロセス プール名 プロセス マネージャー プロセス管理方法 開始時刻 プロセスの開始時期 開始日 開始方法プロセスが実行されている秒数accepted conn プールが合計で受け入れた接続数#listen queue acceptを待機している接続数
max listen queue fpm 後が開始され、受け入れを待機している接続数が史上最大数
listen queue len 設定されたリッスン キューの最大長は、`listen.backlog` およびシステム `cat /proc/sys/net/ によって制限されます。 core/somaxconn` の小さい方の値
アイドル プロセス アイドル プロセス数
アクティブ プロセス 動作中のプロセスの数 (制限あり、子プロセスの総数)
totalプロセス 子プロセスの総数
max activeprocesss fpm開始後、履歴内で同時に動作するプロセスの最大数
最大子プロセスに達しました プロセス管理モードが有効な場合「動的」および「オンデマンド」の場合、この値は、十分な子プロセスがない場合にマスターがさらに子プロセスを作成する回数です。完全なパラメータ
pid 子プロセス ID;
state 子プロセスのステータス (アイドル、実行中、...);
start time 子プロセスが開始された時刻;
start become 子プロセスが開始されてから何秒経過したか;
requests 現在の子プロセスが合計で処理したリクエストの数;
request period の数リクエストにかかるナノ秒;
リクエスト メソッド リクエスト メソッド (GET、POST、...);
リクエスト URI リクエスト パラメータ;
コンテンツの長さ POST リクエスト、リクエストされたコンテンツlength;
user - ユーザー (PHP_AUTH_USER) (設定されていない場合は '-');
php ファイルが要求されるスクリプト;
last request cpu CPU リソース最後のリクエストによって消費された
最後のリクエストのメモリ最後のリクエストによって消費されたピークのメモリ
プロセスがアイドル状態の場合、この情報が記録されます。このリクエストの関連データ、そうでない場合は、この現在のリクエストの関連データ。
バックログ構成の問題
fpm サブプロセスは同時に 1 つのリクエストのみを処理できます。バックログの設定が大きすぎると、nginx などのクライアントによって開始されたリクエストに fpm が設定されなくなります。受付時はnginxが直接接続を切断しますが、fpmがビジー状態で受け付けると切断されたことが分かりエラーが報告されます。バックログの設定が小さすぎると、アクセス量が多いときにすべての fpm サブプロセスがビジー状態になり、バックログがいっぱいになり、新しい接続が拒否されます。このとき、nginx が再度リクエストすると、直接拒否される。したがって、バックログパラメータを適切に設定する必要があります。
ほとんどのパラメータにシステムのデフォルトが使用されている限り、さらに重要なパラメータ設定をいくつか知っておくだけで済みます。それらを使用するときに、関連する手順を振り返ることができます
関連する推奨事項: プログラミングビデオコース
以上がphp-fpm.conf 設定ファイル 中国語および重要なパラメータの説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。