ホームページ  >  記事  >  バックエンド開発  >  Nginx で使用される php-fpm プロセス管理方法と最適化

Nginx で使用される php-fpm プロセス管理方法と最適化

coldplay.xixi
coldplay.xixi転載
2020-08-08 16:51:432354ブラウズ

Nginx で使用される php-fpm プロセス管理方法と最適化

追記: 少し前に php-fpm を構成したときに、php-fpm には 2 つのプロセス管理メソッドがあることに偶然気づきました。 Apacheと同様にプロセス数も設定により動的と静的に分けることができます。

php-fpm には現在、php-5.2.x のバージョンと php-5.3.x のバージョンに対応する 2 つのメイン ブランチがあります。 5.2.x バージョンでは、php-fpm.conf は xml 形式を使用しますが、新しい 5.3.x バージョンでは、php.ini と同じ構成スタイルになります。
5.2.x バージョンでは、php-fpm.conf は、プロセス管理に 2 つのスタイルがあると主張しています。1 つは静的 (静的)、もう 1 つは Apache スタイルに似ています (apache 風の) 。

関連する学習の推奨事項: php プログラミング (ビデオ)

コードは次のとおりです:

Process manager settings
<value name=”pm”>
Sets style of controling worker process count.
Valid values are &#39;static&#39; and ‘apache-like&#39;
<value name=”style”>static</value>

Follow ドキュメントによると、pm スタイルが apache-like を採用している場合、起動されるプロセスの数は StartServers で指定した数と同じになるはずです。ただし、何度か試してみると、実際に PM のスタイルを Apache に似たものに設定しても効果がないことがわかります。つまり、ここではApacheらしい実装はされていません。
ただし、php-fpm をサポートする最新の 5.3.x では、Apache スタイルのプロセス管理が実装されています。

コードは次のとおりです。

; Choose how the process manager will control the number of child processes.
; Possible Values:
; static - a fixed number (pm.max_children) of child processes;
; dynamic - the number of child processes are set dynamically based on the
; following directives:
; pm.max_children - the maximum number of children that can
; be alive at the same time.
; pm.start_servers - the number of children created on startup.
; pm.min_spare_servers - the minimum number of children in &#39;idle&#39;
; state (waiting to process). If the number
; of &#39;idle&#39; processes is less than this
; number then some children will be created.
; pm.max_spare_servers - the maximum number of children in &#39;idle&#39;
; state (waiting to process). If the number
; of &#39;idle&#39; processes is greater than this
; number then some children will be killed.
; Note: This value is mandatory.
;pm = dynamic
pm = static

上の段落からわかるように、プロセス管理には静的と動的の 2 つのスタイルがあります。プロセス管理は実際には以前のバージョンと同じですが、Apache 風のものが動的に変更され、理解しやすくなりました。

static に設定すると、php-fpm プロセスの数は常に pm.max_children で指定された数になり、増減しません。
動的に設定すると、php-fpm プロセスの数は動的になります。pm.start_servers で指定された数から始まります。リクエストが増えると、アイドル プロセスの数が少なくならないように自動的に増加します。 pm.min_spare_servers よりもプロセス数が多い場合は、冗長プロセスの数が pm.max_spare_servers を超えないようにするために、それに応じてクリーンアップされます。

これら 2 つの異なるプロセス管理方法は、サーバーの実際のニーズに応じて調整できます。

まず、これに関連するいくつかのパラメータについて説明します。それらは、pmpm.max_childrenpm.start_serverspm です。 .min_spare_servers および pm.max_spare_servers
pm は使用する方法を示します。選択できる値は 2 つあり、静的 (静的) または動的 (動的) です。古いバージョンでは、dynamic は apache-like と呼ばれていました。このための設定ファイルの記述に注意してください。

次の 4 つのパラメータの意味は次のとおりです。

コードは次のとおりです。

pm.max_children:静态方式下开启的php-fpm进程数量。
pm.start_servers:动态方式下的起始php-fpm进程数量。
pm.min_spare_servers:动态方式下的最小php-fpm进程数量。
pm.max_spare_servers:动态方式下的最大php-fpm进程数量。

dm が static に設定されている場合、この場合、実際には##pm.max_childrenpm.max_children##このパラメータのみが有効になります。システムは、設定された数の php-fpm プロセスを開始します。 dm が動的に設定されている場合、pm.max_children パラメーターは無効になり、次の 3 つのパラメーターが有効になります。システムは、php-fpm の実行が開始されると
pm.start_servers php-fpm プロセスを開始し、システムのニーズに応じて pm.min_spare_servers と pm.max_spare_servers の間で php-fpm プロセスの数を動的に調整します。 。

それでは、どの実行方法がサーバーに適しているのでしょうか?実際、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 の間で設定することをお勧めします。

関連する推奨事項:

プログラミング ビデオ コース

以上がNginx で使用される php-fpm プロセス管理方法と最適化の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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