2016-09-16 13 views
4

ダイナミックプロセスマネージャでphp-fpmがワーカーをどのように管理しているかを明確にしたいと思います。php-fpmは動的プロセスマネージャを使用してワーカーをどのように管理しますか?

のは、我々が設定し、次のしていると仮定しましょう:

pm = dynamic 
pm.max_children = 100 
pm.start_servers = 30 
pm.min_spare_servers = 20 
pm.max_spare_servers = 60 
  1. のphp-FPMを開始し、それは接続がない30個のプロセス
  2. を生成します。 php-fpmは10人の従業員をシャットダウンしますmin_spare_servers?はいの場合、何時後になるのでしょうか?
  3. nginxには40の接続があります。 php-fpmは別のワーカーとのそれぞれの接続を提供し、すぐに残りの接続を満たす追加のワーカーを生成しますか?
  4. nginxには80の接続があります。 60人の労働者を立ち上げた後、php-fpmはどのように動作しますか? (3)と同じですか?
  5. nginxには120の接続があります。 100人の従業員を100人の接続先に割り当てた後はどうなりますか? php-fpmは接続にいくつかのキューを使用していますか?それはnginxを制限するのだろうか? php-fpmは "サーバがpm.max_children設定に達した"というメッセージで接続を切断しますか?
    1. nginxには50の接続があります。 nginxは100から60の接続に戻りますか?または50に?すぐに40人の労働者を殺すのか、それともしばらく待つのだろうか?

ご覧のように、これはかなりのphp-FPMは、プロセスを管理する方法についての一般的な質問です。具体的には、pm.max_childrenpm.max_spare_serversの違いをphp-fpmで理解したいと思います。

答えて

5

まず最初に、nginx接続の代わりに、アップストリームへの接続/要求について、php-fpmが機能しているとしましょう。

  1. 接続がありません。 min_spare_servers設定に従ってphp-fpmが10人のワーカーをシャットダウンしますか?はいの場合、何時後になるのでしょうか?

いいえ、私のテストによると、マスター・プロセスはmin_spare_servers数に応じて、余分な労働者を終了しません。おそらく、start_serversmin_spare_serversと指定することをお勧めします。

  1. nginxには40の接続があります。 php-fpmは別のワーカーとのそれぞれの接続を提供し、すぐに残りの接続を満たす追加のワーカーを生成しますか?

正しく、php-fpmへの同時接続は別のワーカーで処理されます。要求の数がstart_servers以上の場合、マスタプロセスは追加の作業者(fpm_children_make呼び出し)をフォークし、最大でmax_spare_serversになります。

  1. nginxには80の接続があります。 60人の労働者を立ち上げた後、php-fpmはどのように動作しますか? (3)と同じですか?

それはmax_children数に達するまでは、同時にすべての要求を処理するのに必要な数の労働者をforkします。 fpmマスタープロセスが毎秒メンテナンスを実行します(fpm_pctl_perform_idle_server_maintenanceコール):スポーンされたワーカーの数がmax_spare_serversより大きい場合、アイドル状態のワーカーはSIGCHLDシグナルをマスタープロセス(fpm_got_signalおよびfpm_children_buryコール)に送信します。

  1. nginxには120の接続があります。 100人の従業員を100人の接続先に割り当てた後はどうなりますか? php-fpmは接続にいくつかのキューを使用していますか?それはnginxを制限するのだろうか? php-fpmは "server pm.max_children setting"というメッセージで接続を切断しますか?

正しい、あなたはデバッグモードでのメッセージに従います: seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers

<オール開始= "6">を
  • nginxのへの50本の接続があります。 nginxは100から60の接続に戻りますか?または50に?すぐに40人の労働者を殺すのか、それともしばらく待つのだろうか?
  • アイドル状態のすべての労働者が終了され、その数max_spare_serversに到達した後、マスター・プロセスが終了を停止します。
    パラメータmin_spare_serversおよびmax_spare_serversは、アイドル状態で同時に稼動できる作業者の最小数および最大数を管理します。 ... error_log = /var/log/php5-fpm/fpm-daemon.log ... log_level = debug ... ファイルログ従ってください:tail -f /var/log/php5-fpm/fpm-daemon.logをし、行動を理解するためにApacheのベンチマークツールabを使用php-fpm.confでデバッグログを有効にしようと、ひしゃくを理解するために


    +0

    詳細な回答ありがとうございます!あなたは5へのあなたの答えを明確にすることができますか?主に、php-fpmの待ち行列接続を行いますか、それともドロップしますか? –

    +2

    ステータスページを有効にすると、キューに関連するデータを取得できます。 パラメータ 'listen queue len'は、キューに入れることができる最大接続数を定義します。この番号はプール設定で定義されます。 'listen.backlog'です。 php-fpmはファイル/ tcpソケットを使用しているので、この番号は '/ proc/sys/net/core/somaxconn'で定義されているシステム変数で制限されています。 – antonbormotov

    +0

    キューがいっぱいになったら、今後のリクエストは拒否されます。 – antonbormotov

    関連する問題