ホームページ  >  記事  >  バックエンド開発  >  Linux_php スキルにおける php-fpm パラメーター構成とパラメーター最適化手順の概要

Linux_php スキルにおける php-fpm パラメーター構成とパラメーター最適化手順の概要

韦小宝
韦小宝オリジナル
2017-12-04 11:56:161252ブラウズ

この記事では、主に Linux における php-fpm のいくつかの重要なパラメーターの中国語の詳細な説明を説明し、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# エラー レベル。利用可能なレベルは、アラート (直ちに対処する必要があります)、エラー (エラー状況)、警告 (警告状況)、通知 (一般的な重要な情報)、デバッグ (デバッグ情報) です。

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 をバックグラウンドで実行します。デフォルト値は、デバッグのために no に変更できます。 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 へのアクセスを許可します。他のホストの nginx もこの FPM プロセスにアクセスできるように設定する場合は、listen を設定する必要があります。ローカルにアクセスできるIP。デフォルト値は任意です。各アドレスはカンマで区切られます。設定されていないか空の場合、どのサーバーでも接続をリクエストできます

listen.owner = www
listen.group = www

listen.mode = 0666

#unix ソケット設定オプション if tcp を使用してアクセスし、ここにコメントするだけです。

user = www
group = www

#プロセスを開始するアカウントとグループ
pm = 動的

#専用サーバーの場合、pm を静的に設定できます。

#子プロセスを制御する方法。オプションは静的と動的です。 static を選択した場合、固定数の子プロセスが pm.max_children によって指定されます。動的が選択されている場合、次のパラメーターによって決定されます: pm.max_children #
子プロセスの最大数

pm.start_servers #、起動時のプロセス数
pm.min_spare_servers #、アイドル プロセスの最小数を確保します。アイドル プロセスがこの値より小さい場合は、新しい子プロセスを作成します
pm.max_spare_servers #。アイドル プロセスがこの値より大きい場合は、アイドル プロセスの最大数を確保します。クリーンアップ
pm.max_requests = 1000

# 各子プロセスが再起動される前に処理されるリクエストの数を設定します。「0」に設定すると、リクエストは常に処理されます。 PHP_FCGI_MAX_REQUESTS 環境変数と同等。デフォルト: 0.

pm.status_path = /status

#設定されていない場合、ステータス ページにアクセスできません。監視には

ping.path = /ping

#FPM が使用されます。 監視ページの ping URL が設定されていない場合、このページは FPM が生きていて応答できるかどうかを外部から検出するために使用されます。リクエストはスラッシュ (/) で始める必要があることに注意してください。

ping.response = pong

#ping リクエストの返信応答を定義するために使用されます。返されるテキスト/プレーン形式のテキストは HTTP 200 です。デフォルト値: pong.

request_terminate_timeout = 0

#タイムアウトを設定します。単一リクエストの中止時間。php.ini 設定の「max_execution_time」が何らかの特別な理由で実行中のスクリプトを中止しない場合に、「オフ」を意味する「0」に設定すると便利です。 502エラーが多発する場合のオプション。

request_slowlog_timeout = 10s
#リクエストにタイムアウト期間が設定されている場合、対応するPHPコールスタック情報がスローログに完全に書き込まれます。これを「0」に設定すると、「オフ」を意味します

slowlog = log / $pool.log.slow
#request_slowlog_timeout で使用される低速リクエストのログ記録

rlimit_files = 1024
#ファイルオープン記述子の rlimit 制限を設定します。 デフォルト値: デフォルトのオープン可能なハンドルのシステム定義値は 1024 です。 , ulimit -n を使用して表示し、ulimit -n 2048 を使用して変更できます。

rlimit_core = 0
#コアrlimitの最大制限値を設定します。 使用可能な値: '無制限'、0または正の整数 デフォルト値: システム定義値。

chroot =
#At。起動 Chroot ディレクトリ。定義されたディレクトリは絶対パスである必要があります。設定されていない場合、chroot は使用されません。起動時にこのディレクトリに自動的に Chdir が設定されます。 directory は絶対パスである必要があります。デフォルト値: 現在のディレクトリ、または / ディレクトリ (chroot 時)

catch_workers_output = yes
#設定されていない場合は、実行中の stdout と stderr をメインのエラー ログ ファイルにリダイレクトします。 stderr は FastCGI ルールに従って /dev/null にリダイレクトされます。 デフォルト値: empty.


php-fpm パラメータチューニング

は、使用するプロセス番号管理方法を示しますdynamic

は、php-fpm プロセスの数が動的であることを意味し、pm.start_servers で指定された数から始まり、アイドル状態のプロセスの数がそれ以上になるように自動的に増加します。 pm.min_spare_servers の場合、プロセス数がそれ以上の場合、冗長プロセスの数が pm.max_spare_servers 以下になるように、対応するクリーニングが実行されます

static

は、php-fpm プロセスの数が

static
プロセスの数は、増減に関係なく常に 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のプロセスを頻繁に切り替えるとラグが発生するため、メモリに余裕がある場合はstatic機能をオンにした方が良いでしょう。たとえば、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-fpm を使用している場合、対応する php-fpm.conf の値を下げることです。この値は、スレッドが再起動されるまでに送信されるリクエストの数を意味します。 php-fpm が自動的にメモリを解放できるようにするには、この値を適切に下げます。インターネットでよく言われるように、これは 51200 などではありません。実際には、これに関連付けられた別の値、max_children があります。プロセスが毎回作成されるため、実際のメモリ消費量は max_children*max_requests* 各リクエストによって使用されるメモリに基づいて推定できるため、強制終了するスクリプトを作成する必要はありません。

request_terminate_timeout = 30;

最大実行時間はphp.ini (max_execution_time)でも設定できます

request_slowlog_timeout = 2;スローログを有効にする
slowlog = log/$pool.log.slow;ログパス

rlimit_files = 1024; php-fpmのオープンファイル記述子の制限を増やします

php-fpm.confのパラメータは明確に記載されており、何度か読めば覚えられるはずですphp-fpm のパフォーマンスについては、実際の状況に基づいて解決策を決定する必要があります

関連する推奨事項: php-FPM の詳細な説明プロセス プール

PHP-FPM プロセス プール クエスト PHP-FPM のメモリ使用量を削減するソリューションを紹介します

以上がLinux_php スキルにおける php-fpm パラメーター構成とパラメーター最適化手順の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。