検索
ホームページバックエンド開発PHPチュートリアル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 を最適化する必要があるのですか?

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

皮肉なことに、私は通常、ほとんどのユースケースに対してアドバイスを提供します。セットアップが正常に機能し、特別な使用例がない場合は、デフォルト設定を使用してください。ただし、1 台のマシンを超えた拡張を検討している場合は、1 台のマシンから最大限の処理能力を引き出すことが不可欠です。そうすることで、サーバーの支出を半分 (またはそれ以上!) に削減できるからです。

要说明的另一件事情是,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/

推奨学習: 「php-fpm を最適化する必要があるのはなぜですか?最適化するにはどうすればよいですか? ビデオ チュートリアル

以上がphp-fpm を最適化する必要があるのはなぜですか?最適化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事はlearnkuで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
PHPおよびPython:さまざまなパラダイムが説明されていますPHPおよびPython:さまざまなパラダイムが説明されていますApr 18, 2025 am 12:26 AM

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPとPython:彼らの歴史を深く掘り下げますPHPとPython:彼らの歴史を深く掘り下げますApr 18, 2025 am 12:25 AM

PHPは1994年に発信され、Rasmuslerdorfによって開発されました。もともとはウェブサイトの訪問者を追跡するために使用され、サーバー側のスクリプト言語に徐々に進化し、Web開発で広く使用されていました。 Pythonは、1980年代後半にGuidovan Rossumによって開発され、1991年に最初にリリースされました。コードの読みやすさとシンプルさを強調し、科学的コンピューティング、データ分析、その他の分野に適しています。

PHPとPythonの選択:ガイドPHPとPythonの選択:ガイドApr 18, 2025 am 12:24 AM

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

PHPとフレームワーク:言語の近代化PHPとフレームワーク:言語の近代化Apr 18, 2025 am 12:14 AM

PHPは、多数のWebサイトとアプリケーションをサポートし、フレームワークを通じて開発ニーズに適応するため、近代化プロセスで依然として重要です。 1.PHP7はパフォーマンスを向上させ、新機能を紹介します。 2。Laravel、Symfony、Codeigniterなどの最新のフレームワークは、開発を簡素化し、コードの品質を向上させます。 3.パフォーマンスの最適化とベストプラクティスは、アプリケーションの効率をさらに改善します。

PHPの影響:Web開発などPHPの影響:Web開発などApr 18, 2025 am 12:10 AM

phphassiblasifly-impactedwebdevevermentandsbeyondit.1)itpowersmajorplatformslikewordpratsandexcelsindatabase interactions.2)php'sadaptableability allowsitale forlargeapplicationsusingframeworkslikelavel.3)

スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか?スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか?Apr 17, 2025 am 12:25 AM

PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。

PHPは、オブジェクトのクローニング(クローンキーワード)と__Clone Magicメソッドをどのように処理しますか?PHPは、オブジェクトのクローニング(クローンキーワード)と__Clone Magicメソッドをどのように処理しますか?Apr 17, 2025 am 12:24 AM

PHPでは、クローンキーワードを使用してオブジェクトのコピーを作成し、\ _ \ _クローンマジックメソッドを使用してクローン動作をカスタマイズします。 1.クローンキーワードを使用して浅いコピーを作成し、オブジェクトのプロパティをクローン化しますが、オブジェクトのプロパティはクローニングしません。 2。\ _ \ _クローン法は、浅いコピーの問題を避けるために、ネストされたオブジェクトを深くコピーできます。 3.クローニングにおける円形の参照とパフォーマンスの問題を避けるために注意し、クローニング操作を最適化して効率を向上させます。

PHP対Python:ユースケースとアプリケーションPHP対Python:ユースケースとアプリケーションApr 17, 2025 am 12:23 AM

PHPはWeb開発およびコンテンツ管理システムに適しており、Pythonはデータサイエンス、機械学習、自動化スクリプトに適しています。 1.PHPは、高速でスケーラブルなWebサイトとアプリケーションの構築においてうまく機能し、WordPressなどのCMSで一般的に使用されます。 2。Pythonは、NumpyやTensorflowなどの豊富なライブラリを使用して、データサイエンスと機械学習の分野で驚くほどパフォーマンスを発揮しています。

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ヘンタイを無料で生成します。

ホットツール

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

DVWA

DVWA

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

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター