この記事では主に、Linux における php-fpm のいくつかの重要なパラメータの中国語の詳細な説明を説明し、パフォーマンスに関する php-fpm のパラメータの最適化について詳しく紹介します
php-fpm重要な .conf パラメータの詳細説明
pid = run/php-fpm.pid
#pid 設定。デフォルトは var/run/php です。インストール ディレクトリ -fpm.pid では、
error_log = log/php-fpm.log
# エラー ログ (var/log/php-fpm) を有効にすることをお勧めします。 .log はデフォルトでインストール ディレクトリに保存されます。
log_level = Notice
#エラー レベル。利用可能なレベルは次のとおりです: アラート (直ちに処理する必要がある)、エラー (エラー状況)、警告(警告状況)、通知 (一般的な重要情報) )、デバッグ (デバッグ情報) デフォルト: Notice.
emergency_restart_threshold = 60
emergency_restart_interval = 60s
# は、次のことを意味します。 Emergency_restart_interval で設定された値内で SIGSEGV または SIGBUS エラーが発生した場合 php-cgi プロセスの数がEmergency_restart_threshold を超えた場合、php-fpm は正常に再起動します。これら 2 つのオプションは通常、デフォルト値のままです。
process_control_timeout = 0
#メイン プロセスの多重化信号を受け入れるための子プロセスのタイムアウトを設定します。使用可能な単位: s (秒)、m (分)、h (時間) )、または d (日) デフォルトの単位: s (秒) デフォルト値: 0.
daemonize = yes
#fpm をバックグラウンドで実行します、デフォルト値は yes ですデバッグ用の場合は、「いいえ」に変更できます。 FPM では、複数のプロセス プールを異なる設定で実行できます。これらの設定は、プロセス プールごとに個別に設定できます。
listen = 127.0.0.1:9000
#fpm リスニング ポート、これは nginx の php によって処理されるアドレスです。通常、デフォルト値で十分です。使用可能な形式は次のとおりです: 'ip:port'、'port'、'/path/to/unix/socket' 各プロセス プールを設定する必要があります。
listen.backlog = -1
#バックログの数 (-1 は制限がないことを意味します) はオペレーティング システムによって決定されます。この行をコメントアウトするだけです。
listen.allowed_clients = 127.0.0.1
#FastCGI プロセスの IP へのアクセスを許可します。任意の IP を無制限の IP に設定します。他のホストの nginx も同様に設定したい場合は、この FPM プロセスにアクセスし、listen をアクセス可能なローカル IP に設定する必要があります。デフォルト値は任意です。各アドレスはカンマで区切られます。設定されていないか空の場合、接続を要求するサーバーはすべて許可されます
##listen.owner = wwwlisten.group = www
listen.mode = 0666
#Unix ソケット設定オプション。TCP を使用してアクセスする場合は、ここにコメントしてください。
group = www
#プロセスを開始したアカウントとグループ
# 専用サーバーの場合、pm を静的に設定できます。 #子プロセスを制御する方法。オプションは静的と動的です。 static を選択した場合、固定数の子プロセスが pm.max_children によって指定されます。動的が選択されている場合、次のパラメータによって決定されます:
pm.max_children #,
子プロセスの最大数pm.start_servers
#, プロセスの数startingpm.min_spare_servers
#、アイドル プロセスの最小数を確認します。アイドル プロセスがこの値より小さい場合は、新しい子プロセス pm.max_spare_servers
を作成します。 #、アイドルプロセスの数を確認します。最大値。アイドルプロセスがこの値より大きい場合、クリーンアップされます。#pm.max_requests = 1000
#数値を設定します。各子プロセスが生まれ変わる前に処理されるリクエストの数。メモリ リークの可能性に対して、サードパーティ モジュールに非常に役立ちます。「0」に設定すると、リクエストは常に受け入れられます。PHP_FCGI_MAX_REQUESTS 環境変数と同等です。デフォルト値: 0.
pm.status_path = /status
#FPM ステータス ページの URL。設定されていない場合、ステータス ページにアクセスできません。デフォルト値: なし。Munin モニタリングでは ## が使用されます。 #ping.path = /ping
ping.response = pong
request_terminate_timeout = 0
request_slowlog_timeout = 10s
slowlog = log/$pool.log.slow
#遅いリクエストの記録ログ、request_slowlog_timeout とともに使用されます
rlimit_files = 1024
#ファイル オープン記述子の rlimit 制限を設定します。デフォルト値: デフォルトのオープン ハンドルのシステム定義値は 1024 で、これは ulimit -n を使用して表示でき、ulimit -n 2048 で変更できます。
rlimit_core = 0
#コア rlimit の最大制限値を設定します。使用可能な値: '無制限'、0 または正の整数。デフォルト値: システム定義の値。
chroot =
#起動時の chroot ディレクトリ。定義されたディレクトリは絶対パスである必要があります。設定されていない場合、chroot は使用されません。
chdir =
#起動時に自動的に Chdired される起動ディレクトリを設定します。定義されたディレクトリは絶対パスである必要があります。デフォルト値: 現在のディレクトリ、または / ディレクトリ (chroot 時)
catch_workers_output = yes
#実行中のプロセス中に stdout と stderr をメイン エラー ログ ファイルにリダイレクトします。設定されていない場合、stdout と stderr は FastCGI ルールに従って /dev/null にリダイレクトされます。デフォルト値: 空。
php-fpm パラメータ調整
pm = 動的;
どのプロセス番号管理方法が使用されるかを示します
#dynamicphp-fpm プロセスの数が pm で指定された数から動的であることを示します.start_servers. リクエストが多い場合は、アイドル状態のプロセスの数が pm.min_spare_servers 以上になるように自動的に増加します。プロセスが多い場合は、冗長プロセスの数を確保するためにそれに応じてクリーンアップされます。 pm.max_spare_servers 以下です
staticphp-fpm のプロセス数が静的であることを示しますプロセス数は最初から最後まで pm.max_children で指定された数であり、
pm.max_children = 300; 静的モードで開始された php-fpm プロセスの数
pm.start_servers = 20; 動的モードで開始される php-fpm プロセスの数
pm.min_spare_servers = 5; 動的モードでの php-fpm プロセスの最小数
pm.max_spare_servers = 35;動的モードでの php-fpm プロセスの最大数
pm が静的な場合、実際には、パラメーター pm.max_children のみが有効になります。システムは、設定された数の php-fpm プロセスを開きます。
pm が動的である場合、pm.max_children パラメーターは無効になり、次の 3 つのパラメーターが有効になります。 php-fpm の実行が開始されると、システムは pm.start_servers php-fpm プロセスを開始し、システムのニーズに応じて pm.min_spare_servers と pm.max_spare_servers の間で php-fpm プロセスの数を動的に調整します。 #それでは、私たちのサーバーではどの PM 方式が優れているのでしょうか?実際、Apache と同様、実行中の PHP プログラムでは実行後に多かれ少なかれメモリ リークが発生します。これは、php-fpm プロセスが最初は約 3M のメモリしか占有せず、一定期間実行すると 20 ~ 30M に増加する理由でもあります。
大容量メモリ (8G 以上など) を備えたサーバーの場合、静的 max_children を指定する方が実際にはより適切です。これにより、追加のプロセス数制御が必要なくなり、効率が向上します。 php-fpm プロセスを頻繁に切り替えると遅延が発生するため、メモリが十分に大きい場合は静的効果が向上します。また、メモリ/30M で数量を求めることもでき、たとえば 8GB メモリを 100 に設定すると、php-fpm で消費されるメモリを 2G ~ 3G に制御できます。メモリが 1G などわずかに小さい場合は、静的なプロセス数を指定する方がサーバーの安定性に役立ちます。これにより、php-fpm が十分なメモリのみを取得し、他のアプリケーションに少量のメモリが割り当てられて使用されるようになり、システムがよりスムーズに実行されるようになります。
メモリが 256M の VPS など、メモリが少ないサーバーの場合、20M のメモリに基づいて計算したとしても、10 個の php-cgi プロセスで 200M のメモリが消費され、システム クラッシュは非常に深刻になるはずです。深刻です。普通です。したがって、php-fpm プロセスの数をできる限り制御する必要があり、他のアプリケーションが占有しているメモリを大まかに把握した上で、静的に小さな数を割り当てるとシステムがより安定します。または、動的モードを使用します。動的モードは冗長なプロセスを終了し、一部のメモリをリサイクルして解放できるため、メモリの少ないサーバーまたは VPS で使用することをお勧めします。具体的な最大量はメモリ/20M に基づいて取得されます。たとえば、512M VPS の場合、pm.max_spare_servers を 20 に設定することをお勧めします。 pm.min_spare_servers については、サーバーの負荷に応じて 5 ~ 10 の間で設定することをお勧めします。
4G メモリを備えたサーバーでは、200 で十分です (私の 1G テスト マシンでは、64 が最適です。最良の値を取得するには、ストレス テストを使用することをお勧めします)
pm.max_requests = 10240;nginx php-fpm 構成プロセス中の最大の問題は内部リークです: サーバーの負荷は大きくありませんが、メモリ使用量が急速に増加します。すぐにメモリを使い果たし、その後スワップ パーティションを使い始めます。システムがすぐにハングしてしまいます。実際、公式の紹介によると、php-cgi にはメモリ リークはなく、各リクエストが完了した後、php-cgi はメモリを再利用しますが、オペレーティング システムには解放しません。これにより、大量のメモリが消費されます。 php-cgi によって占有されます。 正式な解決策は、PHP_FCGI_MAX_REQUESTS の値を下げることです。php-fpm を使用している場合、対応する php-fpm.conf は max_requests です。この値は、スレッドが再起動されるまでに送信されるリクエストの数を意味します。 . , php-fpm が自動的にメモリを解放できるように、この値を適切に下げる必要があります。インターネットでほとんどの人が言うような 51200 などではありません。実際、別の値 max_children が関連付けられています。これは毎回です。 php-fpm 実際のメモリ消費量が各リクエストで使用される max_children*max_requests*memory になるようにプロセスがいくつ作成されるか これに基づいてメモリ使用量を見積もることができるため、強制終了するスクリプトを記述する必要はありません。 request_terminate_timeout = 30; 最大実行時間は php.ini (max_execution_time) request_slowlog_timeout = 2 で設定することもできます。 スローログを有効にする rlimit_files = 1024; php-fpm制限を追加ファイル記述子を開くとき php-fpm.conf のパラメータは明確に記載されています。何度か読めば覚えられると思います。php-fpm のパフォーマンス プランについては、それを決定する必要があります。最適な構成ソリューションを入手してください PHPクロージャによる外部変数の取得と変数のグローバルキーワード宣言の違いについての説明 ## Anyproxy を使用してパブリック アカウントの記事収集の効率を向上させる詳細な説明
slowlog = log/$pool.log.slow; スローログパス興味があるかもしれない記事:
以上がphp-fpm パラメータ設定の概要と Linux でのパラメータ最適化の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。