検索
ホームページバックエンド開発PHPチュートリアルphp-fpmとは何ですか?パフォーマンスを向上させるために最適化するにはどうすればよいですか?

php-fpmとは何ですか?次の記事では、php-fpm について理解し、php-fpm を最適化する際に何を最適化する必要があるかを紹介します。

php-fpmとは何ですか?パフォーマンスを向上させるために最適化するにはどうすればよいですか?

#php-fpmとは何ですか?パフォーマンスを向上させるために最適化するにはどうすればよいですか? は広く普及しており、インターネット Web アプリケーションで最も広く使用されている言語であると言えます。

しかし、その高いパフォーマンスは、特に同時実行性の高いシステムに関してはあまり知られていません。だからこそ、そのような特定のユースケースでは、Node (はい、言語ではないことはわかっています)、Go、Elixir などの言語に引き継がれています。

とはいえ、サーバー上の php-fpmとは何ですか?パフォーマンスを向上させるために最適化するにはどうすればよいですか? パフォーマンスを向上させるためにできることはたくさんあります。この記事は主に php-fpm に焦点を当てています。Nginx を使用している場合、これはサーバーのデフォルト構成です。

php-fpm が何かご存知の場合は、最適化セクションに直接ジャンプしてください。

php-fpm とは何ですか?

多くの開発者は DevOps の知識にあまり興味がありません。また、興味を持っている人でも、その基礎となる原理を知っている人はほとんどいません。 。興味深いことに、ブラウザが php-fpmとは何ですか?パフォーマンスを向上させるために最適化するにはどうすればよいですか? を実行しているサーバーにリクエストを送信するとき、php-fpmとは何ですか?パフォーマンスを向上させるために最適化するにはどうすればよいですか? がリクエストを処理する最初のサービスではなく、HTTP サーバー、Apache と Nginx が最も重要な 2 つのサービスです。 「Web サーバー」は、php-fpmとは何ですか?パフォーマンスを向上させるために最適化するにはどうすればよいですか? との通信方法を決定し、リクエストのタイプ、データ、ヘッダー情報を php-fpmとは何ですか?パフォーマンスを向上させるために最適化するにはどうすればよいですか? プロセスに渡します。

php-fpmとは何ですか?パフォーマンスを向上させるために最適化するにはどうすればよいですか?

上の図は、php-fpmとは何ですか?パフォーマンスを向上させるために最適化するにはどうすればよいですか? プロジェクトのリクエストとレスポンスのライフ サイクルです (画像ソース: ProinerTech)

最新の php-fpmとは何ですか?パフォーマンスを向上させるために最適化するにはどうすればよいですか? アプリケーションでは、「ファイルの検索」 " の部分は index.php ファイルで、これはすべてのリクエストを処理するためにサーバー構成ファイルで構成されたプロキシです。

Web サーバーが php-fpmとは何ですか?パフォーマンスを向上させるために最適化するにはどうすればよいですか? に接続する正確な方法は、最近進化しており、すべての詳細を掘り下げると、この記事の長さは爆発的に長くなります。しかし、大まかに言えば、Apache が Web サーバーとして選ばれていた時代には、php-fpmとは何ですか?パフォーマンスを向上させるために最適化するにはどうすればよいですか? はサーバー内のモジュールとして組み込まれていました。

したがって、リクエストが受信されるたびに、サーバーは新しいプロセスを開始します。このプロセスには自動的に php-fpmとは何ですか?パフォーマンスを向上させるために最適化するにはどうすればよいですか? が含まれ、リクエストが実行されます。このメソッドは mod_php と呼ばれ、「モジュールとしての php-fpmとは何ですか?パフォーマンスを向上させるために最適化するにはどうすればよいですか?」の略です。このアプローチには限界がありますが、Nginx と php-fpm はそれを克服します。

php-fpm では、php-fpmとは何ですか?パフォーマンスを向上させるために最適化するにはどうすればよいですか? を管理する責任はサーバー内の php-fpmとは何ですか?パフォーマンスを向上させるために最適化するにはどうすればよいですか? プログラムにあります。言い換えれば、Web サーバー (この場合は Nginx) は、データの送受信方法を知っている限り、php-fpmとは何ですか?パフォーマンスを向上させるために最適化するにはどうすればよいですか? がどこでどのように実行されているかを気にしません。この場合、必要に応じて、受信リクエストに対するサブ php-fpmとは何ですか?パフォーマンスを向上させるために最適化するにはどうすればよいですか? プロセスを管理する別のサーバーとして php-fpmとは何ですか?パフォーマンスを向上させるために最適化するにはどうすればよいですか? を扱うことができます (つまり、リクエストをサーバーに送信し、そのリクエストがサーバーで受信されてサーバーに渡されます。これはクレイジーです! :- P)。

Nginx を使用した場合は、次のコードが表示されます:

     location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/run/php/php7.2-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

この行: fastcgi_pass unix:/run/php/php7.2 - fpm.sock; これは、php7.2-fpm.socksocket を通じて php-fpmとは何ですか?パフォーマンスを向上させるために最適化するにはどうすればよいですか? プロセスと通信するように Nginx に指示します。したがって、受信リクエストごとに、Nginx はこのファイルを通じてデータを書き込み、出力を受信した後、それをブラウザーに送り返します。

これは、実行方法に関して最も完全または正確ではありませんが、ほとんどの DevOps タスクに対して完全に正確であることをもう一度強調しなければなりません。

それはさておき、これまでに学んだことを復習しましょう:

  • php-fpmとは何ですか?パフォーマンスを向上させるために最適化するにはどうすればよいですか? はブラウザーから送信されたリクエストを直接受け取りません。 Nginx などの Web サーバーが最初にそれを傍受します。
  • Web サーバーは、php-fpmとは何ですか?パフォーマンスを向上させるために最適化するにはどうすればよいですか? プロセスに接続し、すべてのリクエスト データを php-fpmとは何ですか?パフォーマンスを向上させるために最適化するにはどうすればよいですか? に渡す方法 (すべてを貼り付ける方法) を認識しています。
  • php-fpmとは何ですか?パフォーマンスを向上させるために最適化するにはどうすればよいですか? はその役割を完了した後、応答を Web サーバーに送り返し、Web サーバーはそれをクライアント (ほとんどの場合、ブラウザ) に送り返します。

フローチャートは次のとおりです:

php-fpmとは何ですか?パフォーマンスを向上させるために最適化するにはどうすればよいですか?

php-fpmとは何ですか?パフォーマンスを向上させるために最適化するにはどうすればよいですか? と Nginx はどのように連携しますか? (画像出典: Data Dog)

ここまでは順調ですが、重要な質問は次のとおりです。php-fpmとは何ですか?パフォーマンスを向上させるために最適化するにはどうすればよいですか?-FPM とは正確には何ですか?

FPM php-fpmとは何ですか?パフォーマンスを向上させるために最適化するにはどうすればよいですか? では「Fast」の略です。プロセス マネージャー」という派手な説明は、サーバー上で実行されている php-fpmとは何ですか?パフォーマンスを向上させるために最適化するにはどうすればよいですか? が単一のプロセスではなく、この FPM プロセス マネージャーによって派生、制御、終了される多数の php-fpmとは何ですか?パフォーマンスを向上させるために最適化するにはどうすればよいですか? プロセスであることを意味します。 Web サーバーがリクエストを渡すのはこのプロセス マネージャーです。

php-fpmとは何ですか?パフォーマンスを向上させるために最適化するにはどうすればよいですか?-FPM はそれ自体がまったくのウサギの穴なので、必要に応じて自由に探索してください。ただし、私たちの目的では、これらの説明で十分です。 ?

なぜ php-fpm を最適化する必要があるのですか?

通常、通常の操作条件では、なぜ最適化を検討する必要があるのでしょうか?現状のままにしておいてはいかがでしょうか。

具有讽刺意味的是,一般我为大多数用例提供建议的话。 如果您的设置运行良好,并且没有特殊用例,请使用默认设置。 但是,如果您希望扩展一台机器之外的能力,那么从一台机器中挤出最大的处理能力是必不可少的,因为它可以将您服务器的花费减少一半(甚至更多!)。

要说明的另一件事情是,Nginx是为处理巨大的工作负载而构建的。 它能够同时处理成千上万的连接,但是如果您的php-fpmとは何ですか?パフォーマンスを向上させるために最適化するにはどうすればよいですか?设置不合理,那么您将浪费很多资源,因为Nginx必须等待php-fpmとは何ですか?パフォーマンスを向上させるために最適化するにはどうすればよいですか?完成当前处理之后才可以接受下一个请求,最终Nginx不能为您的服务提供任何优势!

所以,接下来让我们看看尝试优化 php-fpm 时我们到底要优化什么。

如何优化 php-fpmとは何ですか?パフォーマンスを向上させるために最適化するにはどうすればよいですか?-FPM ?

php-fpm 的配置文件在不同服务器上的位置可能不同,因此您需要做一些调查来确定它的位置。在 UNIX 上,你可以使用 find 命令。在我的 Ubuntu 上,它的路径是 /etc/php/7.2/fpm/php-fpm.conf 。当然,7.2是我正在运行的 php-fpmとは何ですか?パフォーマンスを向上させるために最適化するにはどうすればよいですか? 版本。

下面是这个文件的前几行代码:

;;;;;;;;;;;;;;;;;;;;;
; FPM Configuration ;
;;;;;;;;;;;;;;;;;;;;;

; All relative paths in this configuration file are relative to php-fpmとは何ですか?パフォーマンスを向上させるために最適化するにはどうすればよいですか?'s install
; prefix (/usr). This prefix can be dynamically changed by using the
; '-p' argument from the command line.

;;;;;;;;;;;;;;;;;;
; Global Options ;
;;;;;;;;;;;;;;;;;;

[global]
; Pid file
; Note: the default prefix is /var
; Default Value: none
pid = /run/php/php7.2-fpm.pid

; Error log file
; If it's set to "syslog", log is sent to syslogd instead of being written
; into a local file.
; Note: the default prefix is /var
; Default Value: log/php-fpm.log
error_log = /var/log/php7.2-fpm.log

很明显:这一行 pid = /run/php/php7.2-fpm.pid 告诉我们哪个文件包含了 php-fpm 进程的进程 id。

我们还看到 /var/log/php7.2-fpm.logphp-fpm 存储日志的地方。

在这个文件中,像下面这样添加三个变量:

emergency_restart_threshold 10
emergency_restart_interval 1m
process_control_timeout 10s

前两个设置是警告性的,它们告诉 php-fpm 进程,如果10个子进程在一分钟内失败,主 php-fpm 进程应该重新启动自己。

这听起来可能不够稳健,但是 php-fpmとは何ですか?パフォーマンスを向上させるために最適化するにはどうすればよいですか? 是一个短暂的进程,它会泄漏内存,所以在出现高故障时重新启动主进程可以解决很多问题。

第三个选项是 process_control_timeout,它告诉子进程在执行从父进程接收到的信号之前需要等待这么长的时间。这个设置是非常有用的。例如,当父进程发送终止信号时,子进程正在处理某些事情的时候。十秒的时间,他们会有一个更好的机会完成任务并且优雅地退出。

令人惊讶的是,这 不是 php-fpm 的核心配置!这是因为,为了 web 请求服务,php-fpm 创建了一个新的进程池,它将具有一个单独的配置。在我的例子中,进程池的名称是 www,我想编辑的文件是 /etc/php/7.2/fpm/pool.d/www.conf

让我们来看看文件的内容:

; Start a new pool named 'www'.
; the variable $pool can be used in any directive and will be replaced by the
; pool name ('www' here)
[www]

; Per pool prefix
; It only applies on the following directives:
; - 'access.log'
; - 'slowlog'
; - 'listen' (unixsocket)
; - 'chroot'
; - 'chdir'
; - 'php_values'
; - 'php_admin_values'
; When not set, the global prefix (or /usr) applies instead.
; Note: This directive can also be relative to the global prefix.
; Default Value: none
;prefix = /path/to/pools/$pool

; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
user = www-data
group = www-data

快速浏览一下上面代码片段的末尾,您就会明白为什么服务器进程以 www-data 的形式运行了。如果您在设置网站时遇到文件权限问题,您可能要将目录的所有者或组更改为 www-data,从而允许php-fpmとは何ですか?パフォーマンスを向上させるために最適化するにはどうすればよいですか?进程写入日志文件和上传文档等。

最后,我们到达了问题的根源,流程管理器 (pm) 设置。一般情况下,默认值是这样的:

pm = dynamic
pm.max_children = 5
pm.start_servers = 3
pm.min_spare_servers = 2
pm.max_spare_servers = 4
pm.max_requests = 200

那么,这里的 「dynamic(动态)」是什么意思呢?我认为官方文档最好地解释了这一点(我的意思是,这应该已经是您正在编辑的文件的一部分,但是我在这里复制了它,以防它不是):

; 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. With this process management, there will be
;             always at least 1 children.
;             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 'idle'
;                                    state (waiting to process). If the number
;                                    of 'idle' processes is less than this
;                                    number then some children will be created.
;             pm.max_spare_servers - the maximum number of children in 'idle'
;                                    state (waiting to process). If the number
;                                    of 'idle' processes is greater than this
;                                    number then some children will be killed.
;  ondemand - no children are created at startup. Children will be forked when
;             new requests will connect. The following parameter are used:
;             pm.max_children           - the maximum number of children that
;                                         can be alive at the same time.
;             pm.process_idle_timeout   - The number of seconds after which
;                                         an idle process will be killed.
; Note: This value is mandatory.

由此可见,有三个可用值:

  • Static: 无论什么情况,都会保持一个固定的php-fpmとは何ですか?パフォーマンスを向上させるために最適化するにはどうすればよいですか?进程数量。
  • Dynamic: 我们需要指定php-fpm在任何给定时间点会保持活动的最小以及最大进程数量。
  • ondemand: 按照需求创建和销毁进程。

那这些设置有什么影响呢?

简而言之,如果你有个小流量的网站,“dynamic”设置在大多数时间内都是一种资源的浪费。假设你的pm.min_spare_servers设置成了3,那会有三个php-fpmとは何ですか?パフォーマンスを向上させるために最適化するにはどうすればよいですか?进程会被创建并保持运行,甚至是网站没有流量时。这种情况下,“ondemand” 就是个更好的选择, 可以让系统决定何时启动新的进程。

另一方面, 大流量 或者必须快速响应的网站将在这种情况下被惩罚。 最好避免创建新的 php-fpmとは何ですか?パフォーマンスを向上させるために最適化するにはどうすればよいですか? 进程的额外开销,使其成为池的一部分并对其进行监控。

使用 pm = static 固定子进程的数量,使最大的系统资源用于服务请求而不是管理 php-fpmとは何ですか?パフォーマンスを向上させるために最適化するにはどうすればよいですか?。假如你确定走这条路,注意它有其指导方针和陷阱.关于它的一篇相当密集但非常有用的文章是 这篇 。

写在最后

由于有关网络性能的文章可能会引发争论或使人们感到困惑,因此在结束本文之前,我觉得需要讲几句话。 性能调优既涉及系统知识,也涉及猜测和技巧。

php-fpm のすべての設定を完全に理解したとしても、成功は保証されません。 php-fpm の存在を知らなくても、心配して時間を無駄にする必要はありません。すでにやっていることを続けて、続けてください。

同時に、結果ができるだけ劇的にならないようにしてください。はい、php-fpmとは何ですか?パフォーマンスを向上させるために最適化するにはどうすればよいですか? を最初から再コンパイルし、不要なモジュールをすべて削除することでパフォーマンスを向上させることができますが、このアプローチは運用環境では十分に賢明ではありません。何かを最適化するという全体的な考え方は、ニーズがデフォルトと異なるかどうかを確認し (異なることはほとんどありません!)、必要に応じて小さな変更を加えることです。

元のアドレス: https://geekflare.com/php-fpm-optimization/

翻訳アドレス: https://learnku.com/php/t/34358

推奨: 「

php-fpmとは何ですか?パフォーマンスを向上させるために最適化するにはどうすればよいですか? ビデオ チュートリアル

以上がphp-fpmとは何ですか?パフォーマンスを向上させるために最適化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事はlearnkuで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
PHP対Python:違いを理解しますPHP対Python:違いを理解しますApr 11, 2025 am 12:15 AM

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHPは、シンプルな構文と高い実行効率を備えたWeb開発に適しています。 2。Pythonは、簡潔な構文とリッチライブラリを備えたデータサイエンスと機械学習に適しています。

PHP:それは死にかけていますか、それとも単に適応していますか?PHP:それは死にかけていますか、それとも単に適応していますか?Apr 11, 2025 am 12:13 AM

PHPは死にかけていませんが、常に適応して進化しています。 1)PHPは、1994年以来、新しいテクノロジーの傾向に適応するために複数のバージョンの反復を受けています。 2)現在、電子商取引、コンテンツ管理システム、その他の分野で広く使用されています。 3)PHP8は、パフォーマンスと近代化を改善するために、JITコンパイラおよびその他の機能を導入します。 4)Opcacheを使用してPSR-12標準に従って、パフォーマンスとコードの品質を最適化します。

PHPの未来:適応と革新PHPの未来:適応と革新Apr 11, 2025 am 12:01 AM

PHPの将来は、新しいテクノロジーの傾向に適応し、革新的な機能を導入することで達成されます。1)クラウドコンピューティング、コンテナ化、マイクロサービスアーキテクチャに適応し、DockerとKubernetesをサポートします。 2)パフォーマンスとデータ処理の効率を改善するために、JITコンパイラと列挙タイプを導入します。 3)パフォーマンスを継続的に最適化し、ベストプラクティスを促進します。

PHPの抽象クラスまたはインターフェイスに対して、いつ特性を使用しますか?PHPの抽象クラスまたはインターフェイスに対して、いつ特性を使用しますか?Apr 10, 2025 am 09:39 AM

PHPでは、特性は方法が必要な状況に適していますが、継承には適していません。 1)特性により、クラスの多重化方法が複数の継承の複雑さを回避できます。 2)特性を使用する場合、メソッドの競合に注意を払う必要があります。メソッドの競合は、代替およびキーワードとして解決できます。 3)パフォーマンスを最適化し、コードメンテナビリティを改善するために、特性の過剰使用を避け、その単一の責任を維持する必要があります。

依存関係噴射コンテナ(DIC)とは何ですか?また、なぜPHPで使用するのですか?依存関係噴射コンテナ(DIC)とは何ですか?また、なぜPHPで使用するのですか?Apr 10, 2025 am 09:38 AM

依存関係噴射コンテナ(DIC)は、PHPプロジェクトで使用するオブジェクト依存関係を管理および提供するツールです。 DICの主な利点には、次のものが含まれます。1。デカップリング、コンポーネントの独立したもの、およびコードの保守とテストが簡単です。 2。柔軟性、依存関係を交換または変更しやすい。 3.テスト可能性、単体テストのために模擬オブジェクトを注入するのに便利です。

通常のPHPアレイと比較して、SPL SPLFIXEDARRAYとそのパフォーマンス特性を説明してください。通常のPHPアレイと比較して、SPL SPLFIXEDARRAYとそのパフォーマンス特性を説明してください。Apr 10, 2025 am 09:37 AM

SplfixedArrayは、PHPの固定サイズの配列であり、高性能と低いメモリの使用が必要なシナリオに適しています。 1)動的調整によって引き起こされるオーバーヘッドを回避するために、作成時にサイズを指定する必要があります。 2)C言語アレイに基づいて、メモリと高速アクセス速度を直接動作させます。 3)大規模なデータ処理とメモリに敏感な環境に適していますが、サイズが固定されているため、注意して使用する必要があります。

PHPは、ファイルを安全に処理する方法をどのように処理しますか?PHPは、ファイルを安全に処理する方法をどのように処理しますか?Apr 10, 2025 am 09:37 AM

PHPは、$ \ _ファイル変数を介してファイルのアップロードを処理します。セキュリティを確保するための方法には次のものが含まれます。1。アップロードエラー、2。ファイルの種類とサイズを確認する、3。ファイル上書きを防ぐ、4。ファイルを永続的なストレージの場所に移動します。

Null Coulescingオペレーター(??)およびNull Coulescing Assignment Operator(?? =)とは何ですか?Null Coulescingオペレーター(??)およびNull Coulescing Assignment Operator(?? =)とは何ですか?Apr 10, 2025 am 09:33 AM

JavaScriptでは、nullcoalescingoperator(??)およびnullcoalescingsignmentoperator(?? =)を使用できます。 1.??最初の非潜水金または非未定されたオペランドを返します。 2.??これらの演算子は、コードロジックを簡素化し、読みやすさとパフォーマンスを向上させます。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境